Skip to content

Commit fa24b15

Browse files
committed
Merge pull request #165 from scijava/convert-api
Use generic types in the ConvertRequest class
2 parents 93faac4 + d982941 commit fa24b15

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

src/main/java/org/scijava/convert/ConversionRequest.java

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
import java.lang.reflect.Type;
3535

36+
import org.scijava.util.GenericUtils;
37+
3638
/**
3739
* Currency for use in {@link Converter} and {@link ConvertService}
3840
* methods.
@@ -57,52 +59,56 @@
5759
* </p>
5860
*
5961
* @author Mark Hiner
62+
* @author Curtis Rueden
6063
*/
6164
public class ConversionRequest {
6265

6366
// -- Fields --
6467

65-
private final Class<?> srcClass;
66-
private Object srcObject;
67-
private Class<?> destClass;
68-
private Type destType;
68+
private final Type srcType;
69+
private final Type destType;
6970

70-
// -- Constructors --
71+
private Object src;
7172

72-
public ConversionRequest(final Object s, final Class<?> d) {
73-
this(s == null ? null : s.getClass(), d);
74-
srcObject = s;
75-
}
73+
// -- Constructors --
7674

77-
public ConversionRequest(final Class<?> s, final Class<?> d) {
78-
srcClass = s;
79-
destClass = d;
75+
public ConversionRequest(final Object src, final Type destType) {
76+
this(src, src == null ? null : src.getClass(), destType);
8077
}
8178

82-
public ConversionRequest(final Object s, final Type d) {
83-
this(s == null ? null : s.getClass(), d);
84-
srcObject = s;
79+
public ConversionRequest(final Type srcType, final Type destType) {
80+
this(null, srcType, destType);
8581
}
8682

87-
public ConversionRequest(final Class<?> s, final Type d) {
88-
srcClass = s;
89-
destType = d;
83+
public ConversionRequest(final Object src, final Type srcType,
84+
final Type destType)
85+
{
86+
this.src = src;
87+
this.srcType = srcType;
88+
this.destType = destType;
9089
}
9190

9291
// -- Accessors --
9392

93+
/**
94+
* @return Source type for conversion or lookup.
95+
*/
96+
public Type sourceType() {
97+
return srcType;
98+
}
99+
94100
/**
95101
* @return Source class for conversion or lookup.
96102
*/
97103
public Class<?> sourceClass() {
98-
return srcClass;
104+
return GenericUtils.getClass(srcType);
99105
}
100106

101107
/**
102108
* @return Source object for conversion.
103109
*/
104110
public Object sourceObject() {
105-
return srcObject;
111+
return src;
106112
}
107113

108114
/**
@@ -116,10 +122,10 @@ public Type destType() {
116122
* @return Destination class for conversion.
117123
*/
118124
public Class<?> destClass() {
119-
return destClass;
125+
return GenericUtils.getClass(destType);
120126
}
121127

122-
// -- Setters --
128+
// -- Setters --
123129

124130
/**
125131
* Sets the source object for this {@link ConversionRequest}.
@@ -128,11 +134,13 @@ public Class<?> destClass() {
128134
* not match {@link #sourceClass()}.
129135
*/
130136
public void setSourceObject(final Object o) {
131-
if (!srcClass.isAssignableFrom(o.getClass())) {
137+
// TODO: More careful check against srcType itself.
138+
if (!sourceClass().isInstance(o)) {
132139
throw new IllegalArgumentException("Object of type: " + o.getClass() +
133-
" provided. Expected: " + srcClass);
140+
" provided. Expected: " + srcType);
134141
}
135142

136-
srcObject = o;
143+
src = o;
137144
}
145+
138146
}

src/main/java/org/scijava/convert/Converter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@
4747
* @see ConversionRequest
4848
* @author Mark Hiner
4949
*/
50-
public interface Converter<I, O> extends HandlerPlugin<ConversionRequest>
51-
{
50+
public interface Converter<I, O> extends HandlerPlugin<ConversionRequest> {
5251

5352
/**
5453
* Checks whether a given {@ConversionRequest} can be

0 commit comments

Comments
 (0)