@Override public Type<?> visitClassType(final Type<?> type, final TypeBindings bindings) { if (bindings.containsGenericParameter(type)) { return bindings.getBoundType(type); } final TypeBindings oldTypeBindings = type.getTypeBindings(); final TypeBindings newTypeBindings = visitTypeBindings(oldTypeBindings, bindings); if (oldTypeBindings != newTypeBindings) { return type.getGenericTypeDefinition().makeGenericType(newTypeBindings.getBoundTypes()); } return type; }
public TypeBindings withAdditionalParameter(final Type genericParameter) { if (containsGenericParameter(genericParameter)) { return this; } final Type[] genericParameters; final Type[] boundTypes; final int newParameterCount = _genericParameters.size() + 1; boundTypes = new Type[newParameterCount]; genericParameters = new Type[newParameterCount]; _boundTypes.toArray(boundTypes); _genericParameters.toArray(genericParameters); genericParameters[newParameterCount - 1] = genericParameter; boundTypes[newParameterCount - 1] = genericParameter; return new TypeBindings(Type.list(genericParameters), Type.list(boundTypes)); }
public TypeBindings withAdditionalParameter(final Type genericParameter) { if (containsGenericParameter(genericParameter)) { return this; } final Type[] genericParameters; final Type[] boundTypes; final int newParameterCount = _genericParameters.size() + 1; boundTypes = new Type[newParameterCount]; genericParameters = new Type[newParameterCount]; _boundTypes.toArray(boundTypes); _genericParameters.toArray(genericParameters); genericParameters[newParameterCount - 1] = genericParameter; boundTypes[newParameterCount - 1] = genericParameter; return new TypeBindings(Type.list(genericParameters), Type.list(boundTypes)); }
public TypeBindings withAdditionalParameter(final Type genericParameter) { if (containsGenericParameter(genericParameter)) { return this; } final Type[] genericParameters; final Type[] boundTypes; final int newParameterCount = _genericParameters.size() + 1; boundTypes = new Type[newParameterCount]; genericParameters = new Type[newParameterCount]; _boundTypes.toArray(boundTypes); _genericParameters.toArray(genericParameters); genericParameters[newParameterCount - 1] = genericParameter; boundTypes[newParameterCount - 1] = genericParameter; return new TypeBindings(Type.list(genericParameters), Type.list(boundTypes)); }
protected Type<?> visitTypeParameterCore(final Type<?> type, final TypeBindings bindings) { if (!bindings.containsGenericParameter(type) && Types.Object.equals(type.getExtendsBound())) { return type; if (bindings.containsGenericParameter(type)) { return visit(bindings.getBoundType(type), bindings);
@Override public Type<?> visitClassType(final Type<?> type, final TypeBindings bindings) { if (bindings.containsGenericParameter(type)) { return bindings.getBoundType(type); } final TypeBindings oldTypeBindings = type.getTypeBindings(); final TypeBindings newTypeBindings = visitTypeBindings(oldTypeBindings, bindings); if (oldTypeBindings != newTypeBindings) { final Type<?> cachedType = Type.CACHE.find( Type.CACHE.key( type.getErasedClass(), newTypeBindings.getBoundTypes() ) ); if (cachedType != null) { return cachedType; } final GenericType genericType = new GenericType( type.getGenericTypeDefinition(), newTypeBindings ); Type.CACHE.add(genericType); return genericType; } return type; }
@Override public Type<?> visitClassType(final Type<?> type, final TypeBindings bindings) { if (bindings.containsGenericParameter(type)) { return bindings.getBoundType(type); } final TypeBindings oldTypeBindings = type.getTypeBindings(); final TypeBindings newTypeBindings = visitTypeBindings(oldTypeBindings, bindings); if (oldTypeBindings != newTypeBindings) { final Type<?> cachedType = Type.CACHE.find( Type.CACHE.key( type.getErasedClass(), newTypeBindings.getBoundTypes() ) ); if (cachedType != null) { return cachedType; } final GenericType genericType = new GenericType( type.getGenericTypeDefinition(), newTypeBindings ); Type.CACHE.add(genericType); return genericType; } return type; }
@Override public Type<?> visitTypeParameter(final Type<?> type, final TypeBindings bindings) { if (bindings.containsGenericParameter(type)) { return bindings.getBoundType(type); } final Type<?> upperBound = type.getExtendsBound(); final Type<?> newUpperBound = visit(upperBound, bindings); if (newUpperBound != upperBound) { if (type.getDeclaringMethod() != null) { return new GenericParameter( type.getFullName(), (MethodInfo) type.getDeclaringMethod(), newUpperBound, type.getGenericParameterPosition() ); } return new GenericParameter( type.getFullName(), type.getDeclaringType(), newUpperBound, type.getGenericParameterPosition() ); } return type; }
@Override public Type<?> visitTypeParameter(final Type<?> type, final TypeBindings bindings) { if (bindings.containsGenericParameter(type)) { return bindings.getBoundType(type); } final Type<?> upperBound = type.getExtendsBound(); final Type<?> newUpperBound = visit(upperBound, bindings); if (newUpperBound != upperBound) { if (type.getDeclaringMethod() != null) { return new GenericParameter( type.getFullName(), (MethodInfo) type.getDeclaringMethod(), newUpperBound, type.getGenericParameterPosition() ); } return new GenericParameter( type.getFullName(), type.getDeclaringType(), newUpperBound, type.getGenericParameterPosition() ); } return type; }