private Type resolveBindings(final Type type) { return GenericType.GenericBinder.visit(type, _typeBindings); }
public MemberInfo visitMember(final Type<?> declaringType, final MemberInfo member, final TypeBindings bindings) { switch (member.getMemberType()) { case Constructor: return visitConstructor(declaringType, (ConstructorInfo) member, bindings); case Field: return visitField(declaringType, (FieldInfo) member, bindings); case Method: return visitMethod(declaringType, (MethodInfo) member, bindings); case TypeInfo: case NestedType: return visitType((Type<?>) member, bindings); default: throw ContractUtils.unreachable(); } }
final MethodInfo oldDefinition = method.getGenericMethodDefinition(); newDefinition = visitMethod(declaringType, oldDefinition, bindings); hasChanged = newDefinition != oldDefinition; newBindings = visitTypeBindings( oldBindings, bindings.withAdditionalBindings(oldBindings) return visitMethod(declaringType, newDefinition.makeGenericMethod(newBindings.getBoundTypes()), newBindings); final Type<?> returnType = visit(oldReturnType, bindings); final ParameterList oldParameters = method.getParameters(); final ParameterList newParameters = visitParameters(oldParameters, bindings); final TypeList oldThrownTypes = method.getThrownTypes(); final Type<?>[] newThrownTypes = new Type<?>[oldThrownTypes.size()]; final Type<?> newThrownType = visit(oldThrownType, 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) { return type.getGenericTypeDefinition().makeGenericType(newTypeBindings.getBoundTypes()); } return type; }
public ConstructorList visit(final Type<?> declaringType, final ConstructorList constructors, final TypeBindings bindings) { VerifyArgument.notNull(constructors, "constructors"); ConstructorInfo[] newConstructors = null; for (int i = 0, n = constructors.size(); i < n; i++) { final ConstructorInfo oldConstructor = constructors.get(i); final ConstructorInfo newConstructor = visitConstructor(declaringType, oldConstructor, bindings); if (newConstructor != oldConstructor) { if (newConstructors == null) { newConstructors = constructors.toArray(); } newConstructors[i] = newConstructor; } } if (newConstructors != null) { return new ConstructorList(newConstructors); } return constructors; }
public FieldList visit(final Type<?> declaringType, final FieldList fields, final TypeBindings bindings) { VerifyArgument.notNull(fields, "fields"); FieldInfo[] newFields = null; for (int i = 0, n = fields.size(); i < n; i++) { final FieldInfo oldField = fields.get(i); final FieldInfo newField = visitField(declaringType, oldField, bindings); if (newField != oldField) { if (newFields == null) { newFields = fields.toArray(); } newFields[i] = newField; } } if (newFields != null) { return new FieldList(newFields); } return fields; }
public MethodList visit(final Type<?> declaringType, final MethodList methods, final TypeBindings bindings) { VerifyArgument.notNull(methods, "methods"); MethodInfo[] newMethods = null; for (int i = 0, n = methods.size(); i < n; i++) { final MethodInfo oldMethod = methods.get(i); final MethodInfo newMethod = visitMethod(declaringType, oldMethod, bindings); if (newMethod != oldMethod) { if (newMethods == null) { newMethods = methods.toArray(); } newMethods[i] = newMethod; } } if (newMethods != null) { return new MethodList(newMethods); } return methods; }
if (!ownerBindings.isEmpty()) { if (baseBindings.isEmpty()) { return typeBinder.visitMember( owner, member, return typeBinder.visitMember( owner, member,
}; private final static TypeBinder SubstitutingBinder = new TypeBinder();
final MethodInfo oldDefinition = method.getGenericMethodDefinition(); newDefinition = visitMethod(declaringType, oldDefinition, bindings); hasChanged = newDefinition != oldDefinition; newBindings = visitTypeBindings( oldBindings, bindings.withAdditionalBindings(oldBindings) final Type<?> returnType = visit(oldReturnType, bindings); final ParameterList oldParameters = method.getParameters(); final ParameterList newParameters = visitParameters(oldParameters, bindings); final TypeList oldThrownTypes = method.getThrownTypes(); final Type<?>[] newThrownTypes = new Type<?>[oldThrownTypes.size()]; final Type<?> newThrownType = visit(oldThrownType, 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; }
public ConstructorList visit(final Type<?> declaringType, final ConstructorList constructors, final TypeBindings bindings) { VerifyArgument.notNull(constructors, "constructors"); ConstructorInfo[] newConstructors = null; for (int i = 0, n = constructors.size(); i < n; i++) { final ConstructorInfo oldConstructor = constructors.get(i); final ConstructorInfo newConstructor = visitConstructor(declaringType, oldConstructor, bindings); if (newConstructor != oldConstructor) { if (newConstructors == null) { newConstructors = constructors.toArray(); } newConstructors[i] = newConstructor; } } if (newConstructors != null) { return new ConstructorList(newConstructors); } return constructors; }
public FieldList visit(final Type<?> declaringType, final FieldList fields, final TypeBindings bindings) { VerifyArgument.notNull(fields, "fields"); FieldInfo[] newFields = null; for (int i = 0, n = fields.size(); i < n; i++) { final FieldInfo oldField = fields.get(i); final FieldInfo newField = visitField(declaringType, oldField, bindings); if (newField != oldField) { if (newFields == null) { newFields = fields.toArray(); } newFields[i] = newField; } } if (newFields != null) { return new FieldList(newFields); } return fields; }
public MethodList visit(final Type<?> declaringType, final MethodList methods, final TypeBindings bindings) { VerifyArgument.notNull(methods, "methods"); MethodInfo[] newMethods = null; for (int i = 0, n = methods.size(); i < n; i++) { final MethodInfo oldMethod = methods.get(i); final MethodInfo newMethod = visitMethod(declaringType, oldMethod, bindings); if (newMethod != oldMethod) { if (newMethods == null) { newMethods = methods.toArray(); } newMethods[i] = newMethod; } } if (newMethods != null) { return new MethodList(newMethods); } return methods; }
if (!ownerBindings.isEmpty()) { if (baseBindings.isEmpty()) { return typeBinder.visitMember( owner, member, return typeBinder.visitMember( owner, member,
}; private final static TypeBinder SubstitutingBinder = new TypeBinder();
private Type resolveBindings(final Type type) { return GenericType.GenericBinder.visit(type, _typeBindings); }
public MemberInfo visitMember(final Type<?> declaringType, final MemberInfo member, final TypeBindings bindings) { switch (member.getMemberType()) { case Constructor: return visitConstructor(declaringType, (ConstructorInfo) member, bindings); case Field: return visitField(declaringType, (FieldInfo)member, bindings); case Method: return visitMethod(declaringType, (MethodInfo)member, bindings); case TypeInfo: case NestedType: return visitType((Type<?>)member, bindings); default: throw ContractUtils.unreachable(); } }
final MethodInfo oldDefinition = method.getGenericMethodDefinition(); newDefinition = visitMethod(declaringType, oldDefinition, bindings); hasChanged = newDefinition != oldDefinition; newBindings = visitTypeBindings( oldBindings, bindings.withAdditionalBindings(oldBindings) final Type<?> returnType = visit(oldReturnType, bindings); final ParameterList oldParameters = method.getParameters(); final ParameterList newParameters = visitParameters(oldParameters, bindings); final TypeList oldThrownTypes = method.getThrownTypes(); final Type<?>[] newThrownTypes = new Type<?>[oldThrownTypes.size()]; final Type<?> newThrownType = visit(oldThrownType, bindings);