Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 37432 | Differences between
and this patch

Collapse All | Expand All

(-)ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java (-19 / +35 lines)
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$

Return to bug 37432