private static Set<Type> primitiveWrappers(Set<Type> types) { if (types.stream().allMatch(Type::isPrimitive)) { return types; } return types.stream().map(t -> !t.isPrimitive() ? t : ((JavaType) t).primitiveWrapperType()).collect(Collectors.toCollection(LinkedHashSet::new)); }
private static Set<Type> primitiveWrappers(Set<Type> types) { if (types.stream().allMatch(Type::isPrimitive)) { return types; } return types.stream().map(t -> !t.isPrimitive() ? t : ((JavaType) t).primitiveWrapperType()).collect(Collectors.toCollection(LinkedHashSet::new)); }
public TypeSubstitution add(TypeVariableJavaType typeVariableType, JavaType javaType) { substitutions.put(typeVariableType, javaType.isPrimitive() ? javaType.primitiveWrapperType() : javaType); return this; }
public TypeSubstitution add(TypeVariableJavaType typeVariableType, JavaType javaType) { substitutions.put(typeVariableType, javaType.isPrimitive() ? javaType.primitiveWrapperType() : javaType); return this; }
private static boolean autoboxing(Type argumentType, Type collectionParameterType) { return argumentType.isPrimitive() && ((JavaType) collectionParameterType).isPrimitiveWrapper() && isSubtypeOf(((JavaType) argumentType).primitiveWrapperType(), collectionParameterType); } }
private static boolean autoboxing(Type argumentType, Type collectionParameterType) { return argumentType.isPrimitive() && ((JavaType) collectionParameterType).isPrimitiveWrapper() && isSubtypeOf(((JavaType) argumentType).primitiveWrapperType(), collectionParameterType); } }
private boolean autoboxing(Type argumentType, Type collectionParameterType) { return argumentType.isPrimitive() && ((JavaType) collectionParameterType).isPrimitiveWrapper() && isSubtypeOf(((JavaType)argumentType).primitiveWrapperType(), collectionParameterType); } }
private JavaSymbol resolveClassType(Tree tree, Resolve.Env resolveEnv, MemberSelectExpressionTree mse) { resolveAs(mse.expression(), JavaSymbol.TYP, resolveEnv); // member select ending with .class JavaType expressionType = getType(mse.expression()); if (expressionType.isPrimitive()) { expressionType = expressionType.primitiveWrapperType(); } TypeSubstitution typeSubstitution = new TypeSubstitution(); typeSubstitution.add(symbols.classType.getSymbol().typeVariableTypes.get(0), expressionType); JavaType parametrizedClassType = parametrizedTypeCache.getParametrizedTypeType(symbols.classType.symbol, typeSubstitution); registerType(tree, parametrizedClassType); return parametrizedClassType.symbol; }
private JavaSymbol resolveClassType(Tree tree, Resolve.Env resolveEnv, MemberSelectExpressionTree mse) { resolveAs(mse.expression(), JavaSymbol.TYP, resolveEnv); // member select ending with .class JavaType expressionType = getType(mse.expression()); if (expressionType.isPrimitive()) { expressionType = expressionType.primitiveWrapperType(); } TypeSubstitution typeSubstitution = new TypeSubstitution(); typeSubstitution.add(symbols.classType.getSymbol().typeVariableTypes.get(0), expressionType); JavaType parametrizedClassType = parametrizedTypeCache.getParametrizedTypeType(symbols.classType.symbol, typeSubstitution); registerType(tree, parametrizedClassType); return parametrizedClassType.symbol; }
public JavaType conditionalExpressionType(ConditionalExpressionTree tree, JavaType trueType, JavaType falseType) { if (trueType.isTagged(JavaType.DEFERRED)) { return falseType.isTagged(JavaType.DEFERRED) ? symbols.deferedType((ConditionalExpressionTreeImpl) tree) : falseType; } if (falseType.isTagged(JavaType.DEFERRED)) { return trueType; } if (trueType == falseType) { return trueType; } if (trueType.isTagged(JavaType.BOT)) { return falseType.isPrimitive() ? falseType.primitiveWrapperType() : falseType; } if (falseType.isTagged(JavaType.BOT)) { return trueType.isPrimitive() ? trueType.primitiveWrapperType() : trueType; } JavaType secondOperand = getPrimitive(trueType); JavaType thirdOperand = getPrimitive(falseType); if (secondOperand != null && thirdOperand != null && isNumericalConditionalExpression(secondOperand, thirdOperand)) { // If operand is a constant int that can fits a narrow type it should be narrowed. We always narrow to approximate things properly for // method resolution. if ((secondOperand.tag < thirdOperand.tag || secondOperand.isTagged(JavaType.INT)) && !thirdOperand.isTagged(JavaType.INT)) { return thirdOperand; } else { return secondOperand; } } return (JavaType) leastUpperBound(Sets.<Type>newHashSet(trueType, falseType)); }
public JavaType conditionalExpressionType(ConditionalExpressionTree tree, JavaType trueType, JavaType falseType) { if (trueType.isTagged(JavaType.DEFERRED)) { return falseType.isTagged(JavaType.DEFERRED) ? symbols.deferedType((ConditionalExpressionTreeImpl) tree) : falseType; } if (falseType.isTagged(JavaType.DEFERRED)) { return trueType; } if (trueType == falseType) { return trueType; } if (trueType.isTagged(JavaType.BOT)) { return falseType.isPrimitive() ? falseType.primitiveWrapperType() : falseType; } if (falseType.isTagged(JavaType.BOT)) { return trueType.isPrimitive() ? trueType.primitiveWrapperType() : trueType; } JavaType secondOperand = getPrimitive(trueType); JavaType thirdOperand = getPrimitive(falseType); if (secondOperand != null && thirdOperand != null && isNumericalConditionalExpression(secondOperand, thirdOperand)) { // If operand is a constant int that can fits a narrow type it should be narrowed. We always narrow to approximate things properly for // method resolution. if ((secondOperand.tag < thirdOperand.tag || secondOperand.isTagged(JavaType.INT)) && !thirdOperand.isTagged(JavaType.INT)) { return thirdOperand; } else { return secondOperand; } } return (JavaType) leastUpperBound(Sets.<Type>newHashSet(trueType, falseType)); }
@Override protected void onMethodInvocationFound(MethodInvocationTree tree) { ExpressionTree firstArgument = Iterables.getOnlyElement(tree.arguments()); Type argumentType = firstArgument.symbolType().erasure(); if (argumentType.isPrimitive()) { argumentType = ((JavaType) argumentType).primitiveWrapperType(); } Type ownerType = getMethodOwnerType(tree).erasure(); IdentifierTree methodInvocationName = ExpressionUtils.methodName(tree); if (isLiteralNull(firstArgument)) { reportIssue(methodInvocationName, "Remove this call to \"equals\"; comparisons against null always return false; consider using '== null' to check for nullity."); } else if (ownerType.isArray()) { checkWhenOwnerIsArray(methodInvocationName, (Type.ArrayType) ownerType, argumentType); } else { checkWhenOwnerIsNotArray(methodInvocationName, ownerType, argumentType); } }
@Override protected void onMethodInvocationFound(MethodInvocationTree tree) { ExpressionTree firstArgument = Iterables.getOnlyElement(tree.arguments()); Type argumentType = firstArgument.symbolType().erasure(); if (argumentType.isPrimitive()) { argumentType = ((JavaType) argumentType).primitiveWrapperType(); } Type ownerType = getMethodOwnerType(tree).erasure(); IdentifierTree methodInvocationName = ExpressionUtils.methodName(tree); if (isLiteralNull(firstArgument)) { reportIssue(methodInvocationName, "Remove this call to \"equals\"; comparisons against null always return false; consider using '== null' to check for nullity."); } else if (ownerType.isArray()) { checkWhenOwnerIsArray(methodInvocationName, (Type.ArrayType) ownerType, argumentType); } else { checkWhenOwnerIsNotArray(methodInvocationName, ownerType, argumentType); } }