public Type getParameter(int i) { return type.getParameters().get(i); }
private static Type resolveWithParameters(Type type, Type declaringType, EntityType context) { Type[] params = new Type[type.getParameters().size()]; boolean transformed = false; for (int i = 0; i < type.getParameters().size(); i++) { Type param = type.getParameters().get(i); if (param != null && !param.getFullName().equals(type.getFullName())) { params[i] = resolve(param, declaringType, context); if (!params[i].equals(param)) { transformed = true; } } } if (transformed) { return new SimpleType(type, params); } else { return type; } }
private Type asGeneric(Type type) { if (type.getParameters().size() == 0) { int count = type.getJavaClass().getTypeParameters().length; if (count > 0) { return new SimpleType(type, new Type[count]); } } return type; }
private Type getRaw(Type type) { if (type instanceof EntityType && type.getPackageName().startsWith("ext.java")) { return type; } else { return new SimpleType(type, type.getParameters()); } }
private Set<String> getUsedClassNames(EntityType model) { Set<String> result = Sets.newHashSet(); result.add(model.getSimpleName()); for (Property property : model.getProperties()) { result.add(property.getType().getSimpleName()); for (Type type : property.getType().getParameters()) { if (type != null) { result.add(type.getSimpleName()); } } } return result; }
@Test public void map_field_parameters() throws SecurityException, NoSuchFieldException { Field field = Examples.ComplexCollections.class.getDeclaredField("map2"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(2, type.getParameters().size()); Type valueType = type.getParameters().get(1); assertEquals(1, valueType.getParameters().size()); assertEquals(TypeExtends.class, valueType.getParameters().get(0).getClass()); }
@Test public void collection_of_collection() throws SecurityException, NoSuchFieldException { Field field = Examples.GenericRelations.class.getDeclaredField("col3"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); Type valueType = type.getParameters().get(0); assertEquals(TypeExtends.class, valueType.getParameters().get(0).getClass()); }
@Test public void generics_wildCard() throws SecurityException, NoSuchFieldException { Field field = getClass().getDeclaredField("field"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); assertEquals(TypeExtends.class, type.getParameters().get(0).getClass()); // assertNull(type.getParameters().get(0)); }
@Test public void generics_object() throws SecurityException, NoSuchFieldException { Field field = getClass().getDeclaredField("field2"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); assertEquals(Types.OBJECT, type.getParameters().get(0)); }
@Test public void innerClass_field() throws SecurityException, NoSuchFieldException { Field field = Entity.class.getDeclaredField("field"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); assertEquals(Types.OBJECT, type.getParameters().get(0)); }
@Test public void extends_() throws SecurityException, NoSuchFieldException { Field field = getClass().getDeclaredField("field4"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); // assertEquals(Types.OBJECT, type.getParameters().get(0)); }
@Test public void orderBys() throws SecurityException, NoSuchFieldException { Field field = Examples.OrderBys.class.getDeclaredField("orderBy"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); }
@Test public void rawField() throws SecurityException, NoSuchFieldException { Field field = getClass().getDeclaredField("field3"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(1, type.getParameters().size()); // assertEquals(Types.OBJECT, type.getParameters().get(0)); }
@Test public void simpleTypes_classList5() throws SecurityException, NoSuchFieldException { Field field = Examples.SimpleTypes.class.getDeclaredField("classList5"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(TypeCategory.LIST, type.getCategory()); Type parameter = type.getParameters().get(0); assertEquals(ClassType.class, parameter.getClass()); assertEquals(TypeExtends.class, parameter.getParameters().get(0).getClass()); }
@Test public void base_base2() throws SecurityException, NoSuchFieldException { TypeFactory typeFactory = new TypeFactory(); Field field = Base.class.getDeclaredField("base2"); Type type = typeFactory.get(field.getType(), field.getGenericType()); assertEquals(2, type.getParameters().size()); assertNull(((TypeExtends) type.getParameters().get(0)).getVarName()); assertNull(((TypeExtends) type.getParameters().get(1)).getVarName()); }
@Test public void generics_typeVariable() { Type type = factory.getEntityType(Generic2Test.AbstractCollectionAttribute.class); assertEquals(TypeExtends.class, type.getParameters().get(0).getClass()); TypeExtends t = (TypeExtends) type.getParameters().get(0); assertEquals("T", t.getVarName()); }
@Test public void base_base() throws SecurityException, NoSuchFieldException { TypeFactory typeFactory = new TypeFactory(); Field field = Base.class.getDeclaredField("base"); Type type = typeFactory.get(field.getType(), field.getGenericType()); assertEquals(0, type.getParameters().size()); }
@Test public void comparableEntity() { Type type = factory.getEntityType(ComparableEntity.class); //ComparableEntity<T extends Comparable<? super T>> implements Serializable assertEquals(1, type.getParameters().size()); TypeExtends t = (TypeExtends) type.getParameters().get(0); assertEquals("T", t.getVarName()); assertEquals(1, t.getParameters().size()); }
@Test public void subEntity() { Type type = factory.get(Examples.SubEntity.class); assertEquals(0, type.getParameters().size()); }
@Test public void generics_wildcard() throws SecurityException, NoSuchFieldException { Field field = DefaultQueryMetadata.class.getDeclaredField("exprInJoins"); Type type = factory.get(field.getType(), field.getGenericType()); assertEquals(TypeCategory.SET, type.getCategory()); Type parameter = type.getParameters().get(0); assertEquals(Expression.class, parameter.getJavaClass()); parameter = parameter.getParameters().get(0); assertEquals(TypeExtends.class, parameter.getClass()); assertNull(((TypeExtends) parameter).getVarName()); }