Skip to content

Commit d664a14

Browse files
committed
Migrate more ConversionUtils method to Types
Specifically, the following methods moved: * ConversionUtils.getNonprimitiveType -> Types.box * ConversionUtils.getPrimitiveType -> Types.unbox And the unit tests for getNonprimitiveType moved as well, of course. Unit tests for Types.box do not yet exist.
1 parent 23404d5 commit d664a14

File tree

4 files changed

+136
-137
lines changed

4 files changed

+136
-137
lines changed

src/main/java/org/scijava/util/ConversionUtils.java

Lines changed: 12 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -144,80 +144,6 @@ public static boolean canCast(final Object src, final Class<?> dest) {
144144
return src == null || canCast(src.getClass(), dest);
145145
}
146146

147-
/**
148-
* Returns the primitive {@link Class} closest to the given type.
149-
* <p>
150-
* Specifically, the following type conversions are done:
151-
* </p>
152-
* <ul>
153-
* <li>Boolean.class becomes boolean.class</li>
154-
* <li>Byte.class becomes byte.class</li>
155-
* <li>Character.class becomes char.class</li>
156-
* <li>Double.class becomes double.class</li>
157-
* <li>Float.class becomes float.class</li>
158-
* <li>Integer.class becomes int.class</li>
159-
* <li>Long.class becomes long.class</li>
160-
* <li>Short.class becomes short.class</li>
161-
* <li>Void.class becomes void.class</li>
162-
* </ul>
163-
* <p>
164-
* All other types are unchanged.
165-
* </p>
166-
*/
167-
public static <T> Class<T> getPrimitiveType(final Class<T> type) {
168-
final Class<?> destType;
169-
if (type == Boolean.class) destType = boolean.class;
170-
else if (type == Byte.class) destType = byte.class;
171-
else if (type == Character.class) destType = char.class;
172-
else if (type == Double.class) destType = double.class;
173-
else if (type == Float.class) destType = float.class;
174-
else if (type == Integer.class) destType = int.class;
175-
else if (type == Long.class) destType = long.class;
176-
else if (type == Short.class) destType = short.class;
177-
else if (type == Void.class) destType = void.class;
178-
else destType = type;
179-
@SuppressWarnings("unchecked")
180-
final Class<T> result = (Class<T>) destType;
181-
return result;
182-
}
183-
184-
/**
185-
* Returns the non-primitive {@link Class} closest to the given type.
186-
* <p>
187-
* Specifically, the following type conversions are done:
188-
* </p>
189-
* <ul>
190-
* <li>boolean.class becomes Boolean.class</li>
191-
* <li>byte.class becomes Byte.class</li>
192-
* <li>char.class becomes Character.class</li>
193-
* <li>double.class becomes Double.class</li>
194-
* <li>float.class becomes Float.class</li>
195-
* <li>int.class becomes Integer.class</li>
196-
* <li>long.class becomes Long.class</li>
197-
* <li>short.class becomes Short.class</li>
198-
* <li>void.class becomes Void.class</li>
199-
* </ul>
200-
* <p>
201-
* All other types are unchanged.
202-
* </p>
203-
*/
204-
public static <T> Class<T> getNonprimitiveType(final Class<T> type) {
205-
final Class<?> destType;
206-
if (type == boolean.class) destType = Boolean.class;
207-
else if (type == byte.class) destType = Byte.class;
208-
else if (type == char.class) destType = Character.class;
209-
else if (type == double.class) destType = Double.class;
210-
else if (type == float.class) destType = Float.class;
211-
else if (type == int.class) destType = Integer.class;
212-
else if (type == long.class) destType = Long.class;
213-
else if (type == short.class) destType = Short.class;
214-
else if (type == void.class) destType = Void.class;
215-
else destType = type;
216-
@SuppressWarnings("unchecked")
217-
final Class<T> result = (Class<T>) destType;
218-
return result;
219-
}
220-
221147
// -- ConvertService setter --
222148

223149
/**
@@ -308,6 +234,18 @@ public static Class<?> getComponentClass(final Type type) {
308234
return Types.raw(Types.component(type));
309235
}
310236

237+
/** @deprecated use {@link Types#unbox} */
238+
@Deprecated
239+
public static <T> Class<T> getPrimitiveType(final Class<T> type) {
240+
return Types.unbox(type);
241+
}
242+
243+
/** @deprecated use {@link Types#box} */
244+
@Deprecated
245+
public static <T> Class<T> getNonprimitiveType(final Class<T> type) {
246+
return Types.box(type);
247+
}
248+
311249
/** @deprecated Use {@link Types#nullValue} instead. */
312250
@Deprecated
313251
public static <T> T getNullValue(final Class<T> type) {

src/main/java/org/scijava/util/Types.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,76 @@ public static boolean isText(final Class<?> type) {
307307
return String.class.isAssignableFrom(type) || isCharacter(type);
308308
}
309309

310+
/**
311+
* Returns the non-primitive {@link Class} closest to the given type.
312+
* <p>
313+
* Specifically, the following type conversions are done:
314+
* <ul>
315+
* <li>boolean.class becomes Boolean.class</li>
316+
* <li>byte.class becomes Byte.class</li>
317+
* <li>char.class becomes Character.class</li>
318+
* <li>double.class becomes Double.class</li>
319+
* <li>float.class becomes Float.class</li>
320+
* <li>int.class becomes Integer.class</li>
321+
* <li>long.class becomes Long.class</li>
322+
* <li>short.class becomes Short.class</li>
323+
* <li>void.class becomes Void.class</li>
324+
* </ul>
325+
* All other types are unchanged.
326+
* </p>
327+
*/
328+
public static <T> Class<T> box(final Class<T> type) {
329+
final Class<?> destType;
330+
if (type == boolean.class) destType = Boolean.class;
331+
else if (type == byte.class) destType = Byte.class;
332+
else if (type == char.class) destType = Character.class;
333+
else if (type == double.class) destType = Double.class;
334+
else if (type == float.class) destType = Float.class;
335+
else if (type == int.class) destType = Integer.class;
336+
else if (type == long.class) destType = Long.class;
337+
else if (type == short.class) destType = Short.class;
338+
else if (type == void.class) destType = Void.class;
339+
else destType = type;
340+
@SuppressWarnings("unchecked")
341+
final Class<T> result = (Class<T>) destType;
342+
return result;
343+
}
344+
345+
/**
346+
* Returns the primitive {@link Class} closest to the given type.
347+
* <p>
348+
* Specifically, the following type conversions are done:
349+
* <ul>
350+
* <li>Boolean.class becomes boolean.class</li>
351+
* <li>Byte.class becomes byte.class</li>
352+
* <li>Character.class becomes char.class</li>
353+
* <li>Double.class becomes double.class</li>
354+
* <li>Float.class becomes float.class</li>
355+
* <li>Integer.class becomes int.class</li>
356+
* <li>Long.class becomes long.class</li>
357+
* <li>Short.class becomes short.class</li>
358+
* <li>Void.class becomes void.class</li>
359+
* </ul>
360+
* All other types are unchanged.
361+
* </p>
362+
*/
363+
public static <T> Class<T> unbox(final Class<T> type) {
364+
final Class<?> destType;
365+
if (type == Boolean.class) destType = boolean.class;
366+
else if (type == Byte.class) destType = byte.class;
367+
else if (type == Character.class) destType = char.class;
368+
else if (type == Double.class) destType = double.class;
369+
else if (type == Float.class) destType = float.class;
370+
else if (type == Integer.class) destType = int.class;
371+
else if (type == Long.class) destType = long.class;
372+
else if (type == Short.class) destType = short.class;
373+
else if (type == Void.class) destType = void.class;
374+
else destType = type;
375+
@SuppressWarnings("unchecked")
376+
final Class<T> result = (Class<T>) destType;
377+
return result;
378+
}
379+
310380
/**
311381
* Gets the "null" value for the given type. For non-primitives, this will
312382
* actually be null. For primitives, it will be zero for numeric types, false

src/test/java/org/scijava/util/ConversionUtilsTest.java

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -135,69 +135,6 @@ public void testConvertToEnum() {
135135
assertNull(notAnEnum);
136136
}
137137

138-
/** Tests {@link ConversionUtils#getNonprimitiveType(Class)}. */
139-
@Test
140-
public void testGetNonprimitiveType() {
141-
final Class<Boolean> booleanType =
142-
ConversionUtils.getNonprimitiveType(boolean.class);
143-
assertSame(Boolean.class, booleanType);
144-
145-
final Class<Byte> byteType =
146-
ConversionUtils.getNonprimitiveType(byte.class);
147-
assertSame(Byte.class, byteType);
148-
149-
final Class<Character> charType =
150-
ConversionUtils.getNonprimitiveType(char.class);
151-
assertSame(Character.class, charType);
152-
153-
final Class<Double> doubleType =
154-
ConversionUtils.getNonprimitiveType(double.class);
155-
assertSame(Double.class, doubleType);
156-
157-
final Class<Float> floatType =
158-
ConversionUtils.getNonprimitiveType(float.class);
159-
assertSame(Float.class, floatType);
160-
161-
final Class<Integer> intType =
162-
ConversionUtils.getNonprimitiveType(int.class);
163-
assertSame(Integer.class, intType);
164-
165-
final Class<Long> longType =
166-
ConversionUtils.getNonprimitiveType(long.class);
167-
assertSame(Long.class, longType);
168-
169-
final Class<Short> shortType =
170-
ConversionUtils.getNonprimitiveType(short.class);
171-
assertSame(Short.class, shortType);
172-
173-
final Class<Void> voidType =
174-
ConversionUtils.getNonprimitiveType(void.class);
175-
assertSame(Void.class, voidType);
176-
177-
final Class<?>[] types = { //
178-
Boolean.class, Byte.class, Character.class, Double.class, //
179-
Float.class, Integer.class, Long.class, Short.class, //
180-
Void.class, //
181-
String.class, //
182-
Number.class, BigInteger.class, BigDecimal.class, //
183-
boolean[].class, byte[].class, char[].class, double[].class, //
184-
float[].class, int[].class, long[].class, short[].class, //
185-
Boolean[].class, Byte[].class, Character[].class, Double[].class, //
186-
Float[].class, Integer[].class, Long[].class, Short[].class, //
187-
Void[].class, //
188-
Object.class, Object[].class, String[].class, //
189-
Object[][].class, String[][].class, //
190-
Collection.class, //
191-
List.class, ArrayList.class, LinkedList.class, //
192-
Set.class, HashSet.class, //
193-
Map.class, HashMap.class, //
194-
Collection[].class, List[].class, Set[].class, Map[].class };
195-
for (final Class<?> c : types) {
196-
final Class<?> type = ConversionUtils.getNonprimitiveType(c);
197-
assertSame(c, type);
198-
}
199-
}
200-
201138
/**
202139
* Tests populating a primitive array.
203140
*/

src/test/java/org/scijava/util/TypesTest.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,60 @@ public void testRaws() {
191191
Serializable.class, Cloneable.class);
192192
}
193193

194+
/** Tests {@link Types#box(Class)}. */
195+
@Test
196+
public void testBox() {
197+
final Class<Boolean> booleanType = Types.box(boolean.class);
198+
assertSame(Boolean.class, booleanType);
199+
200+
final Class<Byte> byteType = Types.box(byte.class);
201+
assertSame(Byte.class, byteType);
202+
203+
final Class<Character> charType = Types.box(char.class);
204+
assertSame(Character.class, charType);
205+
206+
final Class<Double> doubleType = Types.box(double.class);
207+
assertSame(Double.class, doubleType);
208+
209+
final Class<Float> floatType = Types.box(float.class);
210+
assertSame(Float.class, floatType);
211+
212+
final Class<Integer> intType = Types.box(int.class);
213+
assertSame(Integer.class, intType);
214+
215+
final Class<Long> longType = Types.box(long.class);
216+
assertSame(Long.class, longType);
217+
218+
final Class<Short> shortType = Types.box(short.class);
219+
assertSame(Short.class, shortType);
220+
221+
final Class<Void> voidType = Types.box(void.class);
222+
assertSame(Void.class, voidType);
223+
224+
final Class<?>[] types = { //
225+
Boolean.class, Byte.class, Character.class, Double.class, //
226+
Float.class, Integer.class, Long.class, Short.class, //
227+
Void.class, //
228+
String.class, //
229+
Number.class, BigInteger.class, BigDecimal.class, //
230+
boolean[].class, byte[].class, char[].class, double[].class, //
231+
float[].class, int[].class, long[].class, short[].class, //
232+
Boolean[].class, Byte[].class, Character[].class, Double[].class, //
233+
Float[].class, Integer[].class, Long[].class, Short[].class, //
234+
Void[].class, //
235+
Object.class, Object[].class, String[].class, //
236+
Object[][].class, String[][].class, //
237+
Collection.class, //
238+
List.class, ArrayList.class, LinkedList.class, //
239+
Set.class, HashSet.class, //
240+
Map.class, HashMap.class, //
241+
Collection[].class, List[].class, Set[].class, Map[].class };
242+
for (final Class<?> c : types) {
243+
final Class<?> type = Types.box(c);
244+
assertSame(c, type);
245+
}
246+
}
247+
194248
/** Tests {@link Types#nullValue(Class)}. */
195249
@Test
196250
public void testNullValue() {

0 commit comments

Comments
 (0)