@Override public JavaType erasure() { if (erasure.elementType == null) { erasure.elementType = elementType.erasure(); } return erasure; } }
@Override public JavaType erasure() { if (erasure.elementType == null) { erasure.elementType = elementType.erasure(); } return erasure; } }
@Override public JavaType erasure() { if (erasure.elementType == null) { erasure.elementType = elementType.erasure(); } return erasure; } }
@Override public JavaType erasure() { if (erasure.elementType == null) { erasure.elementType = elementType.erasure(); } return erasure; } }
/** * Erasure of a type variable is the erasure of its leftmost bound. */ @Override public JavaType erasure() { return bounds.get(0).erasure(); }
/** * Erasure of a type variable is the erasure of its leftmost bound. */ @Override public JavaType erasure() { return bounds.get(0).erasure(); }
/** * Erasure of a type variable is the erasure of its leftmost bound. */ @Override public JavaType erasure() { return bounds.get(0).erasure(); } }
private static List<JavaType> erasure(List<JavaType> types) { List<JavaType> erasedTypes = new ArrayList<>(types.size()); for (JavaType type : types) { erasedTypes.add(type.erasure()); } return erasedTypes; }
private static List<JavaType> erasure(List<JavaType> types) { List<JavaType> erasedTypes = new ArrayList<>(types.size()); for (JavaType type : types) { erasedTypes.add(type.erasure()); } return erasedTypes; }
public JavaType getUninferedType() { if (uninferedType == null) { return this; } if (uninferedType.isTagged(JavaType.TYPEVAR)) { // produced by a parameterized method where we have not been able to infer return type, so fallback on its leftmost bound return uninferedType.erasure(); } return uninferedType; } }
public ParametrizedTypeJavaType(JavaSymbol.TypeJavaSymbol symbol, TypeSubstitution typeSubstitution, TypeSubstitutionSolver typeSubstitutionSolver) { super(PARAMETERIZED, symbol); this.rawType = symbol.getType().erasure(); this.typeSubstitution = typeSubstitution; this.typeSubstitutionSolver = typeSubstitutionSolver; }
public JavaType getUninferedType() { if (uninferedType == null) { return this; } if (uninferedType.isTagged(JavaType.TYPEVAR)) { // produced by a parameterized method where we have not been able to infer return type, so fallback on its leftmost bound return uninferedType.erasure(); } return uninferedType; } }
public ParametrizedTypeJavaType(JavaSymbol.TypeJavaSymbol symbol, TypeSubstitution typeSubstitution, TypeSubstitutionSolver typeSubstitutionSolver) { super(PARAMETERIZED, symbol); this.rawType = symbol.getType().erasure(); this.typeSubstitution = typeSubstitution; this.typeSubstitutionSolver = typeSubstitutionSolver; }
private boolean isAcceptableType(JavaType arg, JavaType formal, boolean autoboxing, boolean isParameterized) { // FIXME SONARJAVA-1514 Inference of types for method using parameter types is not handled // FIXME SONARJAVA-1535 type substitution should work with wildcards if (!isParameterized && usesWildcardWithoutTypeSubstitution(formal)) { return types.isSubtype(arg, formal); } // fall back to behavior based on erasure return types.isSubtype(arg.erasure(), formal.erasure()) || (autoboxing && isAcceptableByAutoboxing(arg, formal.erasure())); }
private static boolean differentReturnType(JavaSymbol.MethodJavaSymbol method, JavaSymbol.MethodJavaSymbol overridee) { JavaType methodResultType = resultType(method); JavaType overrideeResultType = resultType(overridee); return specializationOfReturnType(methodResultType.erasure(), overrideeResultType.erasure()) || useRawTypeOfParametrizedType(methodResultType, overrideeResultType); }
@Override public boolean isSubtypeOf(String fullyQualifiedName) { if (isTagged(ARRAY)) { return "java.lang.Object".equals(fullyQualifiedName) || (fullyQualifiedName.endsWith("[]") && ((ArrayJavaType) this).elementType.isSubtypeOf(fullyQualifiedName.substring(0, fullyQualifiedName.length() - 2))); } else if (isTagged(TYPEVAR)) { return erasure().isSubtypeOf(fullyQualifiedName); } return false; }
@Override public boolean isSubtypeOf(String fullyQualifiedName) { if (isTagged(ARRAY)) { return "java.lang.Object".equals(fullyQualifiedName) || (fullyQualifiedName.endsWith("[]") && ((ArrayJavaType) this).elementType.isSubtypeOf(fullyQualifiedName.substring(0, fullyQualifiedName.length() - 2))); } else if (isTagged(TYPEVAR)) { return erasure().isSubtypeOf(fullyQualifiedName); } return false; }
private boolean isRedundantCast(JavaType cast, JavaType expressionType) { JavaType erasedExpressionType = expressionType; if(erasedExpressionType.isTagged(JavaType.TYPEVAR)) { erasedExpressionType = erasedExpressionType.erasure(); } return erasedExpressionType.equals(cast) || (!(cast instanceof JavaType.ParametrizedTypeJavaType) && !cast.isNumerical() && erasedExpressionType.isSubtypeOf(cast)); }
JavaType erasureSubstitution(ParametrizedTypeJavaType type) { TypeSubstitution substitution = new TypeSubstitution(); for (Map.Entry<TypeVariableJavaType, JavaType> entry : type.typeSubstitution.substitutionEntries()) { TypeVariableJavaType typeVar = entry.getKey(); JavaType subs = entry.getValue(); if (typeVar == subs) { subs = subs.erasure(); } substitution.add(typeVar, subs); } return parametrizedTypeCache.getParametrizedTypeType(type.symbol, substitution); }
JavaType erasureSubstitution(ParametrizedTypeJavaType type) { TypeSubstitution substitution = new TypeSubstitution(); for (Map.Entry<TypeVariableJavaType, JavaType> entry : type.typeSubstitution.substitutionEntries()) { TypeVariableJavaType typeVar = entry.getKey(); JavaType subs = entry.getValue(); if (typeVar == subs) { subs = subs.erasure(); } substitution.add(typeVar, subs); } return parametrizedTypeCache.getParametrizedTypeType(type.symbol, substitution); }