@Override void visitGenericArrayType(GenericArrayType t) { result.set(t.getGenericComponentType()); }
/** * Learn whether {@code t} equals {@code a}. * @param a LHS * @param t RHS * @return boolean * @since 3.2 */ private static boolean equals(final GenericArrayType a, final Type t) { return t instanceof GenericArrayType && equals(a.getGenericComponentType(), ((GenericArrayType) t).getGenericComponentType()); }
private boolean isSupertypeOfArray(GenericArrayType subtype) { if (runtimeType instanceof Class) { Class<?> thisClass = (Class<?>) runtimeType; if (!thisClass.isArray()) { return thisClass.isAssignableFrom(Object[].class); } return of(subtype.getGenericComponentType()).isSubtypeOf(thisClass.getComponentType()); } else if (runtimeType instanceof GenericArrayType) { return of(subtype.getGenericComponentType()) .isSubtypeOf(((GenericArrayType) runtimeType).getGenericComponentType()); } else { return false; } }
@Override void visitGenericArrayType(GenericArrayType fromArrayType) { if (to instanceof WildcardType) { return; // Okay to say A[] is <?> } Type componentType = Types.getComponentType(to); checkArgument(componentType != null, "%s is not an array type.", to); populateTypeMappings(mappings, fromArrayType.getGenericComponentType(), componentType); }
@Override public boolean equals(Object obj) { if (obj instanceof GenericArrayType) { GenericArrayType that = (GenericArrayType) obj; return Objects.equal(getGenericComponentType(), that.getGenericComponentType()); } return false; }
private boolean isSubtypeOfArrayType(GenericArrayType supertype) { if (runtimeType instanceof Class) { Class<?> fromClass = (Class<?>) runtimeType; if (!fromClass.isArray()) { return false; } return of(fromClass.getComponentType()).isSubtypeOf(supertype.getGenericComponentType()); } else if (runtimeType instanceof GenericArrayType) { GenericArrayType fromArrayType = (GenericArrayType) runtimeType; return of(fromArrayType.getGenericComponentType()) .isSubtypeOf(supertype.getGenericComponentType()); } else { return false; } }
public static Class<?> getGenericClass(Class<?> cls, int i) { try { ParameterizedType parameterizedType = ((ParameterizedType) cls.getGenericInterfaces()[0]); Object genericClass = parameterizedType.getActualTypeArguments()[i]; if (genericClass instanceof ParameterizedType) { // handle nested generic type return (Class<?>) ((ParameterizedType) genericClass).getRawType(); } else if (genericClass instanceof GenericArrayType) { // handle array generic type return (Class<?>) ((GenericArrayType) genericClass).getGenericComponentType(); } else if (((Class) genericClass).isArray()) { // Requires JDK 7 or higher, Foo<int[]> is no longer GenericArrayType return ((Class) genericClass).getComponentType(); } else { return (Class<?>) genericClass; } } catch (Throwable e) { throw new IllegalArgumentException(cls.getName() + " generic type undefined!", e); } }
public static Class<?> getGenericClass(Class<?> cls, int i) { try { ParameterizedType parameterizedType = ((ParameterizedType) cls.getGenericInterfaces()[0]); Object genericClass = parameterizedType.getActualTypeArguments()[i]; if (genericClass instanceof ParameterizedType) { // handle nested generic type return (Class<?>) ((ParameterizedType) genericClass).getRawType(); } else if (genericClass instanceof GenericArrayType) { // handle array generic type return (Class<?>) ((GenericArrayType) genericClass).getGenericComponentType(); } else if (((Class) genericClass).isArray()) { // Requires JDK 7 or higher, Foo<int[]> is no longer GenericArrayType return ((Class) genericClass).getComponentType(); } else { return (Class<?>) genericClass; } } catch (Throwable e) { throw new IllegalArgumentException(cls.getName() + " generic type undefined!", e); } }
/** * Format a {@link GenericArrayType} as a {@link String}. * @param g {@code GenericArrayType} to format * @return String * @since 3.2 */ private static String genericArrayTypeToString(final GenericArrayType g) { return String.format("%s[]", toString(g.getGenericComponentType())); }
private Type resolveGenericArrayType(GenericArrayType type) { Type componentType = type.getGenericComponentType(); Type resolvedComponentType = resolveType(componentType); return Types.newArrayType(resolvedComponentType); }
private Type resolveGenericArrayType(GenericArrayType type) { Type componentType = type.getGenericComponentType(); Type resolvedComponentType = resolveType(componentType); return Types.newArrayType(resolvedComponentType); }
@Override public boolean equals(Object obj) { if (obj instanceof GenericArrayType) { GenericArrayType that = (GenericArrayType) obj; return Objects.equal(getGenericComponentType(), that.getGenericComponentType()); } return false; }
protected JavaType _fromArrayType(ClassStack context, GenericArrayType type, TypeBindings bindings) { JavaType elementType = _fromAny(context, type.getGenericComponentType(), bindings); return ArrayType.construct(elementType, bindings); }
@Override void visitGenericArrayType(GenericArrayType fromArrayType) { if (to instanceof WildcardType) { return; // Okay to say A[] is <?> } Type componentType = Types.getComponentType(to); checkArgument(componentType != null, "%s is not an array type.", to); populateTypeMappings(mappings, fromArrayType.getGenericComponentType(), componentType); }
private static Type canonicalizeWildcardsInType(Type type) { if (type instanceof ParameterizedType) { return canonicalizeWildcardsInParameterizedType((ParameterizedType) type); } if (type instanceof GenericArrayType) { return Types.newArrayType( canonicalizeWildcardsInType(((GenericArrayType) type).getGenericComponentType())); } return type; }
private static Type canonicalizeWildcardsInType(Type type) { if (type instanceof ParameterizedType) { return canonicalizeWildcardsInParameterizedType((ParameterizedType) type); } if (type instanceof GenericArrayType) { return Types.newArrayType( canonicalizeWildcardsInType(((GenericArrayType) type).getGenericComponentType())); } return type; }
public void testResolveToGenericArrayType() { GenericArrayType arrayType = (GenericArrayType) new Holder<List<int[][]>[]>() {}.getContentType(); ParameterizedType listType = (ParameterizedType) arrayType.getGenericComponentType(); assertEquals(List.class, listType.getRawType()); assertEquals(Types.newArrayType(int[].class), listType.getActualTypeArguments()[0]); }
@Test public void genericArrayType() throws Exception { GenericArrayType type = (GenericArrayType) SerializableTypeWrapper.forField(Fields.class.getField("genericArrayType")); assertThat(type.toString(), equalTo("java.util.List<java.lang.String>[]")); assertSerializable(type); assertSerializable(type.getGenericComponentType()); }
@Test public void getComponentTypeForGenericArrayType() throws Exception { ResolvableType type = ResolvableType.forField(Fields.class.getField("genericArrayType")); assertThat(type.isArray(), equalTo(true)); assertThat(type.getComponentType().getType(), equalTo(((GenericArrayType) type.getType()).getGenericComponentType())); }
public void testNewArrayType() { Type jvmType1 = new TypeCapture<List<String>[]>() {}.capture(); GenericArrayType ourType1 = (GenericArrayType) Types.newArrayType(Types.newParameterizedType(List.class, String.class)); Type jvmType2 = new TypeCapture<List[]>() {}.capture(); Type ourType2 = Types.newArrayType(List.class); new EqualsTester() .addEqualityGroup(jvmType1, ourType1) .addEqualityGroup(jvmType2, ourType2) .testEquals(); assertEquals(new TypeCapture<List<String>>() {}.capture(), ourType1.getGenericComponentType()); assertEquals(jvmType1.toString(), ourType1.toString()); assertEquals(jvmType2.toString(), ourType2.toString()); }