/** * Returns <code>true</code> if the type arguments of the rhs parameterized type are assignable to * the type arguments of the lhs parameterized type. */ private static boolean areTypeArgumentsAssignable( JParameterizedType lhsType, JParameterizedType rhsType) { // areClassTypesAssignable should prevent us from getting here if the types // are referentially equal. assert (lhsType != rhsType); assert (lhsType.getBaseType() == rhsType.getBaseType()); JClassType[] lhsTypeArgs = lhsType.getTypeArgs(); JClassType[] rhsTypeArgs = rhsType.getTypeArgs(); JGenericType lhsBaseType = lhsType.getBaseType(); // Compare at least as many formal type parameters as are declared on the // generic base type. gwt.typeArgs could cause more types to be included. JTypeParameter[] lhsTypeParams = lhsBaseType.getTypeParameters(); for (int i = 0; i < lhsTypeParams.length; ++i) { if (!doesTypeArgumentContain(lhsTypeArgs[i], rhsTypeArgs[i])) { return false; } } return true; }
public JParameterizedType asParameterizationOf(JGenericType type) { Set<JClassType> supertypes = getFlattenedSuperTypeHierarchy(this); for (JClassType supertype : supertypes) { JParameterizedType isParameterized = supertype.isParameterized(); if (isParameterized != null && isParameterized.getBaseType() == type) { return isParameterized; } JRawType isRaw = supertype.isRawType(); if (isRaw != null && isRaw.getBaseType() == type) { return isRaw.asParameterizedByWildcards(); } } return null; }