public static IMethodSignature getLambdaSignature(final MethodGroupExpression node) { return getLambdaSignatureCore(node); }
if (isPrimitive(otherType)) { isPrimitiveComparisonWithCast = isPrimitiveOrWrapper(operandType); isPrimitiveComparisonWithoutCast = isPrimitiveOrWrapper(castType); isPrimitiveComparisonWithCast = isPrimitive(operandType); isPrimitiveComparisonWithoutCast = isPrimitive(castType);
VerifyArgument.notNull(expression, "expression"); final AstNode parent = skipParenthesesUp(expression.getParent()); if (checkSameExpression(expression, ((VariableInitializer) parent).getInitializer())) { if (parent.getParent() instanceof VariableDeclarationStatement) { return getType(resolver, parent.getParent()); expression.getRole() == ArrayCreationExpression.INITIALIZER_ROLE) { return getType(resolver, parent); final TypeReference expectedArrayType = getExpectedTypeByParent(resolver, (Expression) parent); if (checkSameExpression(expression, ((AssignmentExpression) parent).getRight())) { return getType(resolver, ((AssignmentExpression) parent).getLeft()); return getType(resolver, method.getReturnType()); if (checkSameExpression(expression, ((ConditionalExpression) parent).getTrueExpression())) { return getType(resolver, ((ConditionalExpression) parent).getFalseExpression()); else if (checkSameExpression(expression, ((ConditionalExpression) parent).getFalseExpression())) { return getType(resolver, ((ConditionalExpression) parent).getTrueExpression());
TypeUtilities.isBoolean(leftResult.getType()) ^ TypeUtilities.isBoolean(rightResult.getType())) { if (TypeUtilities.isArithmetic(rightResult.getType())) { convertBooleanToNumeric(left); else if (TypeUtilities.isArithmetic(leftResult.getType())) { convertBooleanToNumeric(right); rightResult != null && rightResult.getType() != null && TypeUtilities.isBoolean(leftResult.getType()) ^ TypeUtilities.isBoolean(rightResult.getType())) { if (TypeUtilities.isBoolean(leftResult.getType()) && TypeUtilities.isArithmetic(rightResult.getType())) { else if (TypeUtilities.isArithmetic(leftResult.getType())) { final TypeReference comparandType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(leftResult.getType()); final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, node); if (expectedType != null && TypeUtilities.isBoolean(expectedType)) { final ResolveResult result = _resolver.apply(node); TypeUtilities.isArithmetic(result.getType())) {
VerifyArgument.notNull(expression, "expression"); final AstNode parent = skipParenthesesUp(expression.getParent()); if (checkSameExpression(expression, ((VariableInitializer) parent).getInitializer())) { if (parent.getParent() instanceof VariableDeclarationStatement) { return getType(resolver, parent.getParent()); if (checkSameExpression(expression, ((AssignmentExpression) parent).getRight())) { return getType(resolver, ((AssignmentExpression) parent).getLeft()); return getType(resolver, method.getReturnType()); if (checkSameExpression(expression, ((ConditionalExpression) parent).getTrueExpression())) { return getType(resolver, ((ConditionalExpression) parent).getFalseExpression()); else if (checkSameExpression(expression, ((ConditionalExpression) parent).getFalseExpression())) { return getType(resolver, ((ConditionalExpression) parent).getTrueExpression());
final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, (Expression) function); final IMethodSignature method = TypeUtilities.getLambdaSignature((LambdaExpression) function);
final int lRank = getTypeRank(lType); final int rRank = getTypeRank(rType); if (lUnboxed.isPrimitive() && rUnboxed.isPrimitive()) { isApplicable = lRank <= LONG_RANK && rRank <= LONG_RANK || isBoolean(lUnboxed) || isBoolean(rUnboxed); case LOGICAL_OR: { if (lUnboxed.isPrimitive() && rUnboxed.isPrimitive()) { isApplicable = isBoolean(lType) && isBoolean(rType); final int expectedResultRank = getTypeRank( MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(expectedResultType) );
final TypeReference unboxedOpType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(opType); if (TypeUtilities.isValidPrimitiveLiteralAssignment(unboxedCastType, ((PrimitiveExpression) operand).getValue()) && TypeUtilities.isValidPrimitiveLiteralAssignment(unboxedOpType, ((PrimitiveExpression) operand).getValue())) { final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, (Expression) parent);
protected void processBinaryExpressionOperand( final Expression operand, final TypeReference otherType, final BinaryOperatorType op) { if (operand instanceof CastExpression) { final CastExpression cast = (CastExpression) operand; final Expression toCast = cast.getExpression(); final TypeReference castType = getType(cast); final TypeReference innerType = getType(toCast); if (castType != null && innerType != null && TypeUtilities.isBinaryOperatorApplicable(op, innerType, otherType, false)) { addToResults(cast, false); } } }
@Override public Void visitConditionalExpression(final ConditionalExpression node, final Void data) { super.visitConditionalExpression(node, data); final Expression condition = node.getCondition(); final ResolveResult conditionResult = _resolver.apply(condition); if (conditionResult != null && TypeUtilities.isArithmetic(conditionResult.getType())) { convertNumericToBoolean(condition, conditionResult.getType()); } return null; }
private void processArrayInitializer(final ArrayInitializerExpression node) { final TypeReference expectedArrayType = getExpectedTypeByParent(_resolver, node); if (expectedArrayType == null || !expectedArrayType.isArray()) { return; } final TypeReference target = expectedArrayType.getElementType(); for (final Expression element : node.getElements()) { if (element instanceof CastExpression) { final Expression value = ((CastExpression) element).getExpression(); final TypeReference middle = getType(element); final TypeReference source = getType(value); if (middle != null && source != null && getConversion(target, middle, null).isImplicit() && getConversion(target, source, value).isImplicit() && getConversion(source, middle, null).isImplicit()) { final ConversionType sourceToMiddle = getConversion(middle, source, value); if (sourceToMiddle.isImplicit() && sourceToMiddle.isLossless()) { addToResults((CastExpression) element, false); } } } } }
@Override public Void visitUnaryOperatorExpression(final UnaryOperatorExpression node, final Void data) { super.visitUnaryOperatorExpression(node, data); switch (node.getOperator()) { case NOT: { final Expression operand = node.getExpression(); final ResolveResult result = _resolver.apply(operand); if (result != null && result.getType() != null && !TypeUtilities.isBoolean(result.getType()) && MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(result.getType()).getSimpleType().isNumeric()) { final TypeReference comparandType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(result.getType()); operand.replaceWith( new Function<AstNode, AstNode>() { @Override public AstNode apply(final AstNode input) { return new BinaryOperatorExpression( operand, BinaryOperatorType.INEQUALITY, new PrimitiveExpression(Expression.MYSTERY_OFFSET, JavaPrimitiveCast.cast(comparandType.getSimpleType(), 0)) ); } } ); } break; } } return null; }
TypeUtilities.isBoolean(leftResult.getType()) ^ TypeUtilities.isBoolean(rightResult.getType())) { if (TypeUtilities.isArithmetic(rightResult.getType())) { convertBooleanToNumeric(left); else if (TypeUtilities.isArithmetic(leftResult.getType())) { convertBooleanToNumeric(right); rightResult != null && rightResult.getType() != null && TypeUtilities.isBoolean(leftResult.getType()) ^ TypeUtilities.isBoolean(rightResult.getType())) { if (TypeUtilities.isBoolean(leftResult.getType()) && TypeUtilities.isArithmetic(rightResult.getType())) { else if (TypeUtilities.isArithmetic(leftResult.getType())) { final TypeReference comparandType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(leftResult.getType()); final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, node); if (expectedType != null && TypeUtilities.isBoolean(expectedType)) { final ResolveResult result = _resolver.apply(node); TypeUtilities.isArithmetic(result.getType())) {
VerifyArgument.notNull(expression, "expression"); final AstNode parent = skipParenthesesUp(expression.getParent()); if (checkSameExpression(expression, ((VariableInitializer) parent).getInitializer())) { if (parent.getParent() instanceof VariableDeclarationStatement) { return getType(resolver, parent.getParent()); if (checkSameExpression(expression, ((AssignmentExpression) parent).getRight())) { return getType(resolver, ((AssignmentExpression) parent).getLeft()); return getType(resolver, method.getReturnType()); if (checkSameExpression(expression, ((ConditionalExpression) parent).getTrueExpression())) { return getType(resolver, ((ConditionalExpression) parent).getFalseExpression()); else if (checkSameExpression(expression, ((ConditionalExpression) parent).getFalseExpression())) { return getType(resolver, ((ConditionalExpression) parent).getTrueExpression());
final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, (Expression) function); final IMethodSignature method = TypeUtilities.getLambdaSignature((LambdaExpression) function);
final int lRank = getTypeRank(lType); final int rRank = getTypeRank(rType); if (lUnboxed.isPrimitive() && rUnboxed.isPrimitive()) { isApplicable = lRank <= LONG_RANK && rRank <= LONG_RANK || isBoolean(lUnboxed) || isBoolean(rUnboxed); case LOGICAL_OR: { if (lUnboxed.isPrimitive() && rUnboxed.isPrimitive()) { isApplicable = isBoolean(lType) && isBoolean(rType);
final TypeReference unboxedOpType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(opType); if (TypeUtilities.isValidPrimitiveLiteralAssignment(unboxedCastType, ((PrimitiveExpression) operand).getValue()) && TypeUtilities.isValidPrimitiveLiteralAssignment(unboxedOpType, ((PrimitiveExpression) operand).getValue())) { final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, (Expression) parent);
protected void processBinaryExpressionOperand( final Expression operand, final TypeReference otherType, final BinaryOperatorType op) { if (operand instanceof CastExpression) { final CastExpression cast = (CastExpression) operand; final Expression toCast = cast.getExpression(); final TypeReference castType = getType(cast); final TypeReference innerType = getType(toCast); if (castType != null && innerType != null && TypeUtilities.isBinaryOperatorApplicable(op, innerType, otherType, false)) { addToResults(cast, false); } } }
@Override public Void visitIfElseStatement(final IfElseStatement node, final Void data) { super.visitIfElseStatement(node, data); final Expression condition = node.getCondition(); final ResolveResult conditionResult = _resolver.apply(condition); if (conditionResult != null && TypeUtilities.isArithmetic(conditionResult.getType())) { convertNumericToBoolean(condition, conditionResult.getType()); } return null; }
final TypeReference expectedType = TypeUtilities.getExpectedTypeByParent(_resolver, cast); final boolean isCharConversion = (operandType == BuiltinTypes.Character) ^ (castTo == BuiltinTypes.Character);