/** * Returns raw class for given <code>type</code>. Use this method with both * regular and generic types. * * @param type the type to convert * @return the closest class representing the given <code>type</code> * @see #getRawType(java.lang.reflect.Type, Class) */ public static Class getRawType(final Type type) { return getRawType(type, null); }
types[i] = getRawType(generics[i], implClass); GenericArrayType gat = (GenericArrayType) type; Class rawType = getRawType(gat.getGenericComponentType(), implClass); if (rawType == null) { return null;
return getRawType(pType.getRawType(), implClass); return getRawType(lowerTypes[0], implClass); return getRawType(upperTypes[0], implClass); Class<?> rawType = getRawType(genericComponentType, implClass); Type resolvedType = resolveVariable(varType, implClass); if (resolvedType != null) { return getRawType(resolvedType, null); return Object.class; return getRawType(boundsTypes[0], implClass);
final Class rawType = getRawType(implClass, null);
@Test void testGetFieldConcreteType2() throws Exception { Field array1 = BaseClass.class.getField("array1"); Field f2 = ConcreteClass2.class.getField("f2"); assertEquals(String[].class, ClassUtil.getRawType(array1.getGenericType(), ConcreteClass2.class)); assertEquals(Integer.class, ClassUtil.getRawType(f2.getGenericType(), ConcreteClass2.class)); assertEquals(Integer.class, ClassUtil.getRawType(f2.getGenericType(), BaseClass2.class)); }
@Test void testGetRawWithImplClass() throws NoSuchFieldException { Method number = ClassUtil.findMethod(Base2.class, "getNumber"); Method kiko = ClassUtil.findMethod(Base2.class, "getKiko"); assertEquals(Number.class, ClassUtil.getRawType(number.getReturnType())); assertEquals(Number.class, ClassUtil.getRawType(number.getGenericReturnType())); assertEquals(Object.class, ClassUtil.getRawType(kiko.getReturnType())); assertEquals(Object.class, ClassUtil.getRawType(kiko.getGenericReturnType())); assertEquals(Number.class, ClassUtil.getRawType(number.getReturnType(), Impl1.class)); assertEquals(Number.class, ClassUtil.getRawType(number.getGenericReturnType(), Impl1.class)); assertEquals(Object.class, ClassUtil.getRawType(kiko.getReturnType(), Impl1.class)); assertEquals(Long.class, ClassUtil.getRawType(kiko.getGenericReturnType(), Impl1.class)); assertEquals(Number.class, ClassUtil.getRawType(number.getReturnType(), Impl2.class)); assertEquals(Integer.class, ClassUtil.getRawType(number.getGenericReturnType(), Impl2.class)); assertEquals(Object.class, ClassUtil.getRawType(kiko.getReturnType(), Impl2.class)); assertEquals(Long.class, ClassUtil.getRawType(kiko.getGenericReturnType(), Impl2.class)); assertEquals(Number.class, ClassUtil.getRawType(number.getReturnType(), Impl3.class)); assertEquals(Integer.class, ClassUtil.getRawType(number.getGenericReturnType(), Impl3.class)); assertEquals(Object.class, ClassUtil.getRawType(kiko.getReturnType(), Impl3.class)); assertEquals(Long.class, ClassUtil.getRawType(kiko.getGenericReturnType(), Impl3.class)); }
@Test void testMethodParameterTypeToString() { String result = ""; Method method = null; for (Method m : MethodParameterType.class.getDeclaredMethods()) { for (Type type : m.getGenericParameterTypes()) { result += m.getName() + " - " + ClassUtil.typeToString(type) + '\n'; } method = m; } assertEquals( "m - A extends java.lang.Object\n" + "m - java.lang.String\n" + "m - T extends java.util.List<T>\n" + "m - java.util.List<? extends java.lang.Object>\n" + "m - java.util.List<T extends java.util.List<T>>\n", result); Type[] types = method.getGenericParameterTypes(); assertEquals(Object.class, ClassUtil.getRawType(types[0], MethodParameterType.class)); assertEquals(String.class, ClassUtil.getRawType(types[1], MethodParameterType.class)); assertEquals(List.class, ClassUtil.getRawType(types[2], MethodParameterType.class)); assertEquals(List.class, ClassUtil.getRawType(types[3], MethodParameterType.class)); assertEquals(List.class, ClassUtil.getRawType(types[4], MethodParameterType.class)); // same methods, using different impl class assertEquals(Long.class, ClassUtil.getRawType(types[0], Mimple.class)); // change! assertEquals(String.class, ClassUtil.getRawType(types[1], Mimple.class)); assertEquals(List.class, ClassUtil.getRawType(types[2], Mimple.class)); assertEquals(List.class, ClassUtil.getRawType(types[3], Mimple.class)); assertEquals(List.class, ClassUtil.getRawType(types[4], Mimple.class)); }
this.method = method; this.returnType = method.getGenericReturnType(); this.rawReturnType = ClassUtil.getRawType(returnType, classDescriptor.getType()); final Class rawParameterType = genericParams.length == 0 ? parameterType : ClassUtil.getRawType(genericParams[i], classDescriptor.getType()); final Class rawParameterComponentType = genericParams.length == 0 ? null :
@Test void testGetFieldConcreteType() throws NoSuchFieldException { Field f1 = BaseClass.class.getField("f1"); Field f2 = BaseClass.class.getField("f2"); Field f3 = BaseClass.class.getField("f3"); Field f4 = ConcreteClass.class.getField("f4"); Field f5 = ConcreteClass.class.getField("f5"); Field array1 = BaseClass.class.getField("array1"); Class[] genericSupertypes = ClassUtil.getGenericSupertypes(ConcreteClass.class); assertEquals(String.class, genericSupertypes[0]); assertEquals(Integer.class, genericSupertypes[1]); assertEquals(String.class, ClassUtil.getRawType(f1.getGenericType(), ConcreteClass.class)); assertEquals(Integer.class, ClassUtil.getRawType(f2.getGenericType(), ConcreteClass.class)); assertEquals(String.class, ClassUtil.getRawType(f3.getGenericType(), ConcreteClass.class)); assertEquals(Long.class, ClassUtil.getRawType(f4.getGenericType(), ConcreteClass.class)); assertEquals(List.class, ClassUtil.getRawType(f5.getGenericType(), ConcreteClass.class)); assertEquals(String[].class, ClassUtil.getRawType(array1.getGenericType(), ConcreteClass.class)); assertEquals(Object.class, ClassUtil.getRawType(f1.getGenericType())); assertNull(ClassUtil.getComponentType(f1.getGenericType(), -1)); assertEquals(Long.class, ClassUtil.getComponentType(f5.getGenericType(), 0)); }
/** * Creates new field descriptor and resolve all additional field data. * Also, forces access to a field. */ public FieldDescriptor(final ClassDescriptor classDescriptor, final Field field) { super(classDescriptor, ClassUtil.isPublic(field)); this.field = field; this.type = field.getGenericType(); this.rawType = ClassUtil.getRawType(type, classDescriptor.getType()); Class[] componentTypes = ClassUtil.getComponentTypes(type, classDescriptor.getType()); if (componentTypes != null) { this.rawComponentType = componentTypes[componentTypes.length - 1]; this.rawKeyComponentType = componentTypes[0]; } else { this.rawComponentType = null; this.rawKeyComponentType = null; } // force access ClassUtil.forceAccess(field); // mapper final Mapper mapper = field.getAnnotation(Mapper.class); if (mapper != null) { mapperFunction = MapperFunctionInstances.get().lookup(mapper.value()); } else { mapperFunction = null; } }
assertEquals(List.class, ClassUtil.getRawType(stringList.getType())); assertEquals(String.class, ClassUtil.getComponentType(stringList.getGenericType(), 0)); assertEquals(String[].class, ClassUtil.getRawType(strings.getType())); assertEquals(String.class, ClassUtil.getComponentType(strings.getGenericType(), -1)); assertEquals(String.class, ClassUtil.getRawType(string.getType())); assertNull(ClassUtil.getComponentType(string.getGenericType(), 0)); assertEquals(List.class, ClassUtil.getRawType(integerList.getReturnType())); assertEquals(Integer.class, ClassUtil.getComponentType(integerList.getGenericReturnType(), -1)); assertEquals(Integer[].class, ClassUtil.getRawType(integers.getReturnType())); assertEquals(Integer.class, ClassUtil.getComponentType(integers.getGenericReturnType(), 0)); assertEquals(Integer.class, ClassUtil.getRawType(integer.getReturnType())); assertNull(ClassUtil.getComponentType(integer.getGenericReturnType(), -1)); assertEquals(Object.class, ClassUtil.getRawType(template.getReturnType())); assertNull(ClassUtil.getComponentType(template.getGenericReturnType(), 0)); assertEquals(Collection.class, ClassUtil.getRawType(collection.getReturnType())); assertEquals(Number.class, ClassUtil.getComponentType(collection.getGenericReturnType(), -1)); assertEquals(Collection.class, ClassUtil.getRawType(collection2.getReturnType())); assertEquals(Object.class, ClassUtil.getComponentType(collection2.getGenericReturnType(), 0));
/** * Returns raw class for given <code>type</code>. Use this method with both * regular and generic types. * * @param type the type to convert * @return the closest class representing the given <code>type</code> * @see #getRawType(java.lang.reflect.Type, Class) */ public static Class getRawType(final Type type) { return getRawType(type, null); }
return getRawType(pType.getRawType(), implClass); return getRawType(lowerTypes[0], implClass); return getRawType(upperTypes[0], implClass); Class<?> rawType = getRawType(genericComponentType, implClass); Type resolvedType = resolveVariable(varType, implClass); if (resolvedType != null) { return getRawType(resolvedType, null); return Object.class; return getRawType(boundsTypes[0], implClass);
types[i] = getRawType(generics[i], implClass); GenericArrayType gat = (GenericArrayType) type; Class rawType = getRawType(gat.getGenericComponentType(), implClass); if (rawType == null) { return null;
final Class rawType = getRawType(implClass, null);
this.method = method; this.returnType = method.getGenericReturnType(); this.rawReturnType = ClassUtil.getRawType(returnType, classDescriptor.getType()); final Class rawParameterType = genericParams.length == 0 ? parameterType : ClassUtil.getRawType(genericParams[i], classDescriptor.getType()); final Class rawParameterComponentType = genericParams.length == 0 ? null :
/** * Creates new field descriptor and resolve all additional field data. * Also, forces access to a field. */ public FieldDescriptor(final ClassDescriptor classDescriptor, final Field field) { super(classDescriptor, ClassUtil.isPublic(field)); this.field = field; this.type = field.getGenericType(); this.rawType = ClassUtil.getRawType(type, classDescriptor.getType()); Class[] componentTypes = ClassUtil.getComponentTypes(type, classDescriptor.getType()); if (componentTypes != null) { this.rawComponentType = componentTypes[componentTypes.length - 1]; this.rawKeyComponentType = componentTypes[0]; } else { this.rawComponentType = null; this.rawKeyComponentType = null; } // force access ClassUtil.forceAccess(field); // mapper final Mapper mapper = field.getAnnotation(Mapper.class); if (mapper != null) { mapperFunction = MapperFunctionInstances.get().lookup(mapper.value()); } else { mapperFunction = null; } }