@CheckForNull private static JavaType getCollectionItemType(ExpressionTree expression) { JavaType expressionType = (JavaType) expression.symbolType(); if (expressionType.isSubtypeOf("java.util.Collection") && !expressionType.isParameterized()) { // Ignoring raw collections (too many FP) return null; } if (expressionType.isArray()) { return ((ArrayJavaType) expressionType).elementType(); } else if(expressionType.isClass()) { ClassJavaType clazz = (ClassJavaType) expressionType; return clazz.superTypes() .stream() .filter(t -> t.is("java.lang.Iterable") && t.isParameterized()) .findFirst() .map(iter -> { ParametrizedTypeJavaType ptype = (ParametrizedTypeJavaType) iter; return ptype.substitution(ptype.typeParameters().get(0)); }).orElse(null); } return null; }
@CheckForNull private static JavaType getCollectionItemType(ExpressionTree expression) { JavaType expressionType = (JavaType) expression.symbolType(); if (expressionType.isSubtypeOf("java.util.Collection") && !expressionType.isParameterized()) { // Ignoring raw collections (too many FP) return null; } if (expressionType.isArray()) { return ((ArrayJavaType) expressionType).elementType(); } else if(expressionType.isClass()) { ClassJavaType clazz = (ClassJavaType) expressionType; return clazz.superTypes() .stream() .filter(t -> t.is("java.lang.Iterable") && t.isParameterized()) .findFirst() .map(iter -> { ParametrizedTypeJavaType ptype = (ParametrizedTypeJavaType) iter; return ptype.substitution(ptype.typeParameters().get(0)); }).orElse(null); } return null; }
} else if (argType.isSubtypeOf(formalType.erasure()) && argType.isClass()) { for (JavaType superType : ((ClassJavaType) argType).superTypes()) { if (sameErasure(formalType, superType)) {
} else if (argType.isSubtypeOf(formalType.erasure()) && argType.isClass()) { for (JavaType superType : ((ClassJavaType) argType).superTypes()) { if (sameErasure(formalType, superType)) {