/** Returns a new {@code TypeResolver} with {@code variable} mapping to {@code type}. */ final TypeTable where(Map<TypeVariableKey, ? extends Type> mappings) { ImmutableMap.Builder<TypeVariableKey, Type> builder = ImmutableMap.builder(); builder.putAll(map); for (Entry<TypeVariableKey, ? extends Type> mapping : mappings.entrySet()) { TypeVariableKey variable = mapping.getKey(); Type type = mapping.getValue(); checkArgument(!variable.equalsType(type), "Type variable %s bound to itself", variable); builder.put(variable, type); } return new TypeTable(builder.build()); }
/** * Resolves all type variables in {@code type} and all downstream types and returns a * corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { return resolveWildcardType((WildcardType) type); } else { // if Class<?>, no resolution needed, we are done. return type; } }
@Override public Type resolveInternal(TypeVariable<?> intermediateVar, TypeTable forDependent) { if (intermediateVar.getGenericDeclaration().equals(var.getGenericDeclaration())) { return intermediateVar; } return unguarded.resolveInternal(intermediateVar, forDependent); } };
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType) type; return new Types.WildcardTypeImpl( resolveTypes(wildcardType.getLowerBounds()), resolveTypes(wildcardType.getUpperBounds())); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType) type; return new Types.WildcardTypeImpl( resolveTypes(wildcardType.getLowerBounds()), resolveTypes(wildcardType.getUpperBounds())); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType) type; return new Types.WildcardTypeImpl( resolveTypes(wildcardType.getLowerBounds()), resolveTypes(wildcardType.getUpperBounds())); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { return resolveWildcardType((WildcardType) type); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and returns a * corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { return resolveWildcardType((WildcardType) type); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { WildcardType wildcardType = (WildcardType) type; return new Types.WildcardTypeImpl( resolveTypes(wildcardType.getLowerBounds()), resolveTypes(wildcardType.getUpperBounds())); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and returns a * corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { return resolveWildcardType((WildcardType) type); } else { // if Class<?>, no resolution needed, we are done. return type; } }
/** * Resolves all type variables in {@code type} and all downstream types and * returns a corresponding type with type variables resolved. */ public Type resolveType(Type type) { checkNotNull(type); if (type instanceof TypeVariable) { return typeTable.resolve((TypeVariable<?>) type); } else if (type instanceof ParameterizedType) { return resolveParameterizedType((ParameterizedType) type); } else if (type instanceof GenericArrayType) { return resolveGenericArrayType((GenericArrayType) type); } else if (type instanceof WildcardType) { return resolveWildcardType((WildcardType) type); } else { // if Class<?>, no resolution needed, we are done. return type; } }
public TypeResolver() { this.typeTable = new TypeTable(); }
public TypeResolver() { this.typeTable = new TypeTable(); }
public TypeResolver() { this.typeTable = new TypeTable(); }
public TypeResolver() { this.typeTable = new TypeTable(); }
public TypeResolver() { this.typeTable = new TypeTable(); }
public TypeResolver() { this.typeTable = new TypeTable(); }
final Type resolve(final TypeVariable<?> var) { final TypeTable unguarded = this; TypeTable guarded = new TypeTable() { @Override public Type resolveInternal(TypeVariable<?> intermediateVar, TypeTable forDependent) { if (intermediateVar.getGenericDeclaration().equals(var.getGenericDeclaration())) { return intermediateVar; } return unguarded.resolveInternal(intermediateVar, forDependent); } }; return resolveInternal(var, guarded); }
final Type resolve(final TypeVariable<?> var) { final TypeTable unguarded = this; TypeTable guarded = new TypeTable() { @Override public Type resolveInternal(TypeVariable<?> intermediateVar, TypeTable forDependent) { if (intermediateVar.getGenericDeclaration().equals(var.getGenericDeclaration())) { return intermediateVar; } return unguarded.resolveInternal(intermediateVar, forDependent); } }; return resolveInternal(var, guarded); }
/** Returns a new {@code TypeResolver} with {@code variable} mapping to {@code type}. */ TypeResolver where(Map<? extends TypeVariable<?>, ? extends Type> mappings) { return new TypeResolver(typeTable.where(mappings)); }