public TypeList getGenericTypeParameters() { if (isGenericType()) { return getTypeBindings().getGenericParameters(); } throw Error.notGenericType(this); }
@Override public Type visitArrayType(final Type t, final Void ignored) { final Type elementType = t.getElementType(); if (elementType.isPrimitive() || isSameType(elementType, Types.Object)) { return arraySuperType(); } else { return new ArrayType(superType(elementType)); } } };
public void add(final Type type) { final TypeList typeArguments; if (type.isGenericType()) { typeArguments = type.getTypeBindings().getBoundTypes(); } else { typeArguments = TypeList.empty(); } put(key(type.getErasedClass(), typeArguments), 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) { return type.getGenericTypeDefinition().makeGenericType(newTypeBindings.getBoundTypes()); } return type; }
public boolean containsGenericParameters() { if (getReturnType().containsGenericParameters()) { return true; } final ParameterList parameters = getParameters(); for (int i = 0, n = parameters.size(); i < n; i++) { final ParameterInfo parameter = parameters.get(i); if (parameter.getParameterType().containsGenericParameters()) { return true; } } return false; }
@Override public Void visitWildcardType(final Type source, final Type target) throws AdaptFailure { if (source.hasExtendsBound()) { adaptRecursive(upperBound(source), upperBound(target)); } else if (source.hasSuperBound()) { adaptRecursive(lowerBound(source), lowerBound(target)); } return null; }
public static boolean returnTypeSubstitutable(final MethodInfo r1, final MethodInfo r2) { if (hasSameArgs(r1, r2)) { return resultSubtype(r1, r2); } return covariantReturnType( r1.getReturnType(), erasure(r2.getReturnType()) ); }
@Override public Type<?> visitWildcardType(final Type<?> type, final TypeBindings bindings) { final Type<?> oldLower = type.getSuperBound(); final Type<?> oldUpper = type.getExtendsBound(); final Type<?> newLower = visit(oldLower, bindings); final Type<?> newUpper = visit(oldUpper, bindings); if (newLower != oldLower || newUpper != oldUpper) { return new WildcardType<>(newUpper, newLower); } return type; }
public TypeList getTypeArguments() { if (isGenericType()) { return getTypeBindings().getBoundTypes(); } // throw Error.notGenericType(this); return TypeList.empty(); }
@Override public Type visitTypeParameter(final Type t, final Void ignored) { final Type bound = t.getExtendsBound(); if (!bound.isCompoundType() && !bound.isInterface()) { return bound; } return superType(bound); }
@Override public boolean isEquivalentTo(final MemberInfo m) { return m instanceof MethodBase && super.isEquivalentTo(m) && ((MethodBase) m).getParameters().getParameterTypes().isEquivalentTo(getParameters().getParameterTypes()); } }
public static boolean hasSameArgs(final MethodInfo t, final MethodInfo p) { return containsTypeEquivalent( t.getParameters().getParameterTypes(), p.getParameters().getParameterTypes() ); }
static Set<BindingFlags> fromMember(final MemberInfo member) { if (member instanceof Type) { return fromTypeModifiers(member.getModifiers()); } return fromMethodModifiers(member.getModifiers()); }
private void ensureInterfaces() { if (_interfaces == null) { synchronized (CACHE_LOCK) { if (_interfaces == null) { _interfaces = GenericBinder.visit(_genericTypeDefinition.getExplicitInterfaces(), _typeBindings); } } } }
public void add(final Type type) { final TypeList typeArguments; if (type.isGenericType()) { typeArguments = type.getTypeBindings().getBoundTypes(); } else { typeArguments = TypeList.empty(); } put(key(type.getErasedClass(), typeArguments), type); }
public boolean containsGenericParameters() { if (getReturnType().containsGenericParameters()) { return true; } final ParameterList parameters = getParameters(); for (int i = 0, n = parameters.size(); i < n; i++) { final ParameterInfo parameter = parameters.get(i); if (parameter.getParameterType().containsGenericParameters()) { return true; } } return false; }
public TypeList getGenericTypeParameters() { if (isGenericType()) { return getTypeBindings().getGenericParameters(); } throw Error.notGenericType(this); }
@Override public Type<?> visitWildcardType(final Type<?> type, final TypeBindings bindings) { final Type<?> oldLower = type.getSuperBound(); final Type<?> oldUpper = type.getExtendsBound(); final Type<?> newLower = visit(oldLower, bindings); final Type<?> newUpper = visit(oldUpper, bindings); if (newLower != oldLower || newUpper != oldUpper) { return new WildcardType<>(newUpper, newLower); } return type; }