|
Lines 702-735
Link Here
|
| 702 |
if (!"equals".equals(method.getName().getIdentifier())) { //$NON-NLS-1$ |
702 |
if (!"equals".equals(method.getName().getIdentifier())) { //$NON-NLS-1$ |
| 703 |
return false; |
703 |
return false; |
| 704 |
} |
704 |
} |
| 705 |
Expression left= method.getExpression(); //always non-null |
|
|
| 706 |
List arguments= method.arguments(); |
705 |
List arguments= method.arguments(); |
| 707 |
if (arguments.size() != 1) { //overloaded equals w/ more than 1 arg |
706 |
if (arguments.size() != 1) { //overloaded equals w/ more than 1 arg |
| 708 |
return false; |
707 |
return false; |
| 709 |
} |
708 |
} |
| 710 |
Expression right= (Expression) arguments.get(0); |
709 |
Expression right= (Expression) arguments.get(0); |
| 711 |
ITypeBinding binding = right.resolveTypeBinding(); |
710 |
ITypeBinding binding = right.resolveTypeBinding(); |
| 712 |
if (!(binding.isClass() || binding.isInterface())) { //overloaded equals w/ non-class/interface arg |
711 |
if (!(binding.isClass() || binding.isInterface())) { //overloaded equals w/ non-class/interface arg or null |
| 713 |
return false; |
712 |
return false; |
| 714 |
} |
713 |
} |
| 715 |
|
714 |
Expression left= method.getExpression(); |
| 716 |
ASTRewrite rewrite= new ASTRewrite(method); |
715 |
|
| 717 |
|
716 |
ASTRewrite rewrite; |
| 718 |
if (left instanceof ParenthesizedExpression) { |
717 |
if (left == null) { // equals(x) -> x.equals(this) |
| 719 |
Expression ex = ((ParenthesizedExpression) left).getExpression(); |
718 |
rewrite= new ASTRewrite(method.getParent()); |
| 720 |
rewrite.markAsReplaced(right, rewrite.createCopy(ex)); |
719 |
AST ast= rewrite.getAST(); |
|
|
720 |
MethodInvocation replacement= ast.newMethodInvocation(); |
| 721 |
replacement.setName((SimpleName) rewrite.createCopy(method.getName())); |
| 722 |
replacement.arguments().add(ast.newThisExpression()); |
| 723 |
replacement.setExpression((Expression) rewrite.createCopy(right)); |
| 724 |
rewrite.markAsReplaced(method, replacement); |
| 725 |
} else if (right instanceof ThisExpression) { // x.equals(this) -> equals(x) |
| 726 |
rewrite= new ASTRewrite(method.getParent()); |
| 727 |
MethodInvocation replacement= rewrite.getAST().newMethodInvocation(); |
| 728 |
replacement.setName((SimpleName) rewrite.createCopy(method.getName())); |
| 729 |
replacement.arguments().add(rewrite.createCopy(left)); |
| 730 |
rewrite.markAsReplaced(method, replacement); |
| 721 |
} else { |
731 |
} else { |
| 722 |
rewrite.markAsReplaced(right, left); |
732 |
rewrite= new ASTRewrite(method); |
| 723 |
} |
733 |
if (left instanceof ParenthesizedExpression) { |
| 724 |
if ((right instanceof CastExpression) |
734 |
Expression ex= ((ParenthesizedExpression) left).getExpression(); |
| 725 |
|| (right instanceof Assignment) |
735 |
rewrite.markAsReplaced(right, rewrite.createCopy(ex)); |
| 726 |
|| (right instanceof ConditionalExpression) |
736 |
} else { |
| 727 |
|| (right instanceof InfixExpression)) { |
737 |
rewrite.markAsReplaced(right, rewrite.createCopy(left)); |
| 728 |
ParenthesizedExpression paren = method.getAST().newParenthesizedExpression(); |
738 |
} |
| 729 |
paren.setExpression((Expression) rewrite.createCopy(right)); |
739 |
if ((right instanceof CastExpression) |
| 730 |
rewrite.markAsReplaced(left, paren); |
740 |
|| (right instanceof Assignment) |
| 731 |
} else { |
741 |
|| (right instanceof ConditionalExpression) |
| 732 |
rewrite.markAsReplaced(left, right); |
742 |
|| (right instanceof InfixExpression)) { |
|
|
743 |
ParenthesizedExpression paren= rewrite.getAST().newParenthesizedExpression(); |
| 744 |
paren.setExpression((Expression) rewrite.createCopy(right)); |
| 745 |
rewrite.markAsReplaced(left, paren); |
| 746 |
} else { |
| 747 |
rewrite.markAsReplaced(left, rewrite.createCopy(right)); |
| 748 |
} |
| 733 |
} |
749 |
} |
| 734 |
|
750 |
|
| 735 |
String label= CorrectionMessages.getString("QuickAssistProcessor.invertequals.description"); //$NON-NLS-1$ |
751 |
String label= CorrectionMessages.getString("QuickAssistProcessor.invertequals.description"); //$NON-NLS-1$ |