private static boolean textOfExpressionsIsEquivalent( GrExpression expToCompare1, GrExpression expToCompare2) { final String text1 = expToCompare1.getText(); final String text2 = expToCompare2.getText(); return text1.equals(text2); }
@SuppressWarnings({"ConstantConditions"}) public static boolean expressionsAreEquivalent( @Nullable GrExpression exp1, @Nullable GrExpression exp2) { if (exp1 == null && exp2 == null) { return true; } if (exp1 == null || exp2 == null) { return false; } GrExpression expToCompare1 = (GrExpression) PsiUtil.skipParentheses(exp1, false); GrExpression expToCompare2 = (GrExpression) PsiUtil.skipParentheses(exp2, false); final int type1 = getExpressionType(expToCompare1); final int type2 = getExpressionType(expToCompare2); if (type1 != type2) { return false; } switch (type1) { case THIS_EXPRESSION: case SUPER_EXPRESSION: return true; case LITERAL_EXPRESSION: case REFERENCE_EXPRESSION: final String text1 = expToCompare1.getText(); final String text2 = expToCompare2.getText(); return text1.equals(text2); case CALL_EXPRESSION: return methodCallExpressionsAreEquivalent( (GrMethodCall) expToCompare1, (GrMethodCall) expToCompare2); case NEW_EXPRESSION: return newExpressionsAreEquivalent( (GrNewExpression) expToCompare1, (GrNewExpression) expToCompare2); case ARRAY_LITERAL_EXPRESSION: return arrayDeclarationsAreEquivalent( (GrArrayDeclaration) expToCompare1, (GrArrayDeclaration) expToCompare2); case PREFIX_EXPRESSION: return prefixExpressionsAreEquivalent( (GrUnaryExpression) expToCompare1, (GrUnaryExpression) expToCompare2); case POSTFIX_EXPRESSION: return postfixExpressionsAreEquivalent( (GrUnaryExpression) expToCompare1, (GrUnaryExpression) expToCompare2); case BINARY_EXPRESSION: return binaryExpressionsAreEquivalent( (GrBinaryExpression) expToCompare1, (GrBinaryExpression) expToCompare2); case ASSIGNMENT_EXPRESSION: return assignmentExpressionsAreEquivalent( (GrAssignmentExpression) expToCompare1, (GrAssignmentExpression) expToCompare2); case CONDITIONAL_EXPRESSION: return conditionalExpressionsAreEquivalent( (GrConditionalExpression) expToCompare1, (GrConditionalExpression) expToCompare2); case ELVIS_EXPRESSION: return elvisExpressionsAreEquivalent( (GrElvisExpression) expToCompare1, (GrElvisExpression) expToCompare2); case RANGE_EXPRESSION: return rangeExpressionsAreEquivalent( (GrRangeExpression) expToCompare1, (GrRangeExpression) expToCompare2); case TYPE_CAST_EXPRESSION: return typecastExpressionsAreEquivalent( (GrTypeCastExpression) expToCompare1, (GrTypeCastExpression) expToCompare2); case SAFE_CAST_EXPRESSION: return safecastExpressionsAreEquivalent( (GrSafeCastExpression) expToCompare1, (GrSafeCastExpression) expToCompare2); case INSTANCEOF_EXPRESSION: return instanceofExpressionsAreEquivalent( (GrInstanceOfExpression) expToCompare1, (GrInstanceOfExpression) expToCompare2); case INDEX_EXPRESSION: return indexExpressionsAreEquivalent( (GrIndexProperty) expToCompare1, (GrIndexProperty) expToCompare2); case LIST_OR_MAP_EXPRESSION: return listOrMapExpressionsAreEquivalent( (GrListOrMap) expToCompare1, (GrListOrMap) expToCompare2); case CLOSABLE_BLOCK_EXPRESSION: return closableBlockExpressionsAreEquivalent( (GrClosableBlock) expToCompare1, (GrClosableBlock) expToCompare2); case PROPERTY_SELECTION_EXPRESSION: return textOfExpressionsIsEquivalent(expToCompare1, expToCompare2); // todo default: return false; } }