private static <T> Class<?> getTypeParameterForSuperClass(Type target, Class<T> superClass, int index) { Class targetClass = getClassOfType(target); if (superClass.equals(getClassOfType(targetClass.getGenericSuperclass()))) { Type superType = targetClass.getGenericSuperclass(); if (superType instanceof ParameterizedType) { if (((ParameterizedType) superType).getRawType().equals(superClass)) { Type boundType = ((ParameterizedType) superType).getActualTypeArguments()[index]; if (boundType instanceof Class) { return (Class<?>) boundType; } else { return null; } } } } return getTypeParameterForSuperClass(targetClass.getGenericSuperclass(), superClass, index); }
private static <T> Class<?> getTypeParameterForSuperInterface(Type target, Class<T> superClass, int index) { Class targetClass = getClassOfType(target); for (Type superType : targetClass.getGenericInterfaces()) { if (superType instanceof ParameterizedType) { if (((ParameterizedType) superType).getRawType().equals(superClass)) { Type boundType = ((ParameterizedType) superType).getActualTypeArguments()[index]; if (boundType instanceof Class) { return (Class<?>) boundType; } else { return null; } } } } return getTypeParameterForSuperInterface(targetClass.getGenericSuperclass(), superClass, index); }
public static <T> Class<?> getTypeParameterForSuper(Type target, Class<T> superClass, int index) { Class targetClass = getClassOfType(target); Preconditions.checkArgument(superClass.isAssignableFrom(targetClass), "Target must be a child of superClass"); if (superClass.isInterface()) { return getTypeParameterForSuperInterface(target, superClass, index); } else { return getTypeParameterForSuperClass(target, superClass, index); } }
@Override public boolean shouldSkipField(FieldAttributes f) { Type fieldType = f.getDeclaredType(); Class<?> fieldClass = ReflectionUtil.getClassOfType(fieldType); if (Map.class.isAssignableFrom(fieldClass)) { Type mapKeyType = ReflectionUtil.getTypeParameter(fieldType, 0); return String.class != mapKeyType; } return false; }
private List<ComponentFieldUri> determineAnimationPoolUris() { final List<ComponentFieldUri> animationSetUris = Lists.newArrayList(); for (ComponentMetadata<?> componentMetadata : componentLibrary.iterateComponentMetadata()) { SimpleUri uri = componentMetadata.getUri(); for (FieldMetadata<?, ?> fieldMetadata : componentMetadata.getFields()) { if (fieldMetadata.getType().isAssignableFrom(List.class)) { Type fieldType = fieldMetadata.getField().getGenericType(); if (fieldType instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) fieldType; Type[] typeArguments = parameterizedType.getActualTypeArguments(); if (typeArguments.length == 1) { Class<?> typeClass = ReflectionUtil.getClassOfType(typeArguments[0]); if (typeClass.isAssignableFrom(MeshAnimation.class)) { animationSetUris.add(new ComponentFieldUri(uri, fieldMetadata.getName())); } } } } } } return animationSetUris; }
public CopyStrategy<?> getStrategy(Type genericType) { Class<?> typeClass = ReflectionUtil.getClassOfType(genericType); if (typeClass == null) { logger.error("Cannot obtain class for type {}, using default strategy", genericType);
@SuppressWarnings("unchecked") public TypeHandler<?> getHandlerFor(Type genericType) { Class<?> typeClass = ReflectionUtil.getClassOfType(genericType); if (typeClass == null) { logger.error("Unabled to get class from type {}", genericType);