Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Styrberg2019-04-18 11:14:39 +0000
committerRoland Grunberg2019-04-24 17:27:07 +0000
commite4738e9a11af9e88998afc33430c33d179e103a0 (patch)
treea825cc26b11c0884c7bd04b637e3e1cede9c5be3
parent2551b9bc3a4d24c23865b40afa7ef1d698d86131 (diff)
downloadeclipse.jdt.ui-e4738e9a11af9e88998afc33430c33d179e103a0.tar.gz
eclipse.jdt.ui-e4738e9a11af9e88998afc33430c33d179e103a0.tar.xz
eclipse.jdt.ui-e4738e9a11af9e88998afc33430c33d179e103a0.zip
Bug 546302 - [quick assist] Fix issue with getter field access
Fix case with the getter only and an assignment expression Change-Id: Ibb07f4187f1662e37ce9ff9321a2b30a4fb05b7b Signed-off-by: Kenneth Styrberg <kenneth@kean.nu>
-rw-r--r--org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java
index 3dbaf308e1..addc4e0150 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/sef/AccessAnalyzer.java
@@ -140,7 +140,7 @@ class AccessAnalyzer extends ASTVisitor {
Operator operator= node.getOperator();
if (operator != Operator.ASSIGN) {
- // setter only selected
+ // setter only selected. Ex. f += 10; --> setF(f + 10);
if (!fSetter.isEmpty() && fGetter.isEmpty()) {
InfixExpression argument= ast.newInfixExpression();
MethodInvocation invocation= ast.newMethodInvocation();
@@ -153,8 +153,32 @@ class AccessAnalyzer extends ASTVisitor {
Expression rhs= (Expression) fRewriter.createCopyTarget(rightHandSide);
argument.setRightOperand(rhs);
fRewriter.replace(node, invocation, createGroupDescription(WRITE_ACCESS));
+ fReferencingSetter= true;
return false;
}
+ // getter only selected. Ex. f += 10; --> f = getF() + 10;
+ if (fSetter.isEmpty() && !fGetter.isEmpty()) {
+ Assignment assignment= ast.newAssignment();
+ assignment.setLeftHandSide(ast.newSimpleName(leftHandSide.toString()));
+ InfixExpression argument= ast.newInfixExpression();
+ MethodInvocation invocation= ast.newMethodInvocation();
+ invocation.setName(ast.newSimpleName(fGetter));
+ if (receiver != null)
+ invocation.setExpression((Expression) fRewriter.createCopyTarget(receiver));
+ argument.setOperator(ASTNodes.convertToInfixOperator(node.getOperator()));
+ argument.setLeftOperand(invocation);
+ Expression rhs= (Expression) fRewriter.createCopyTarget(rightHandSide);
+ argument.setRightOperand(rhs);
+ assignment.setRightHandSide(argument);
+ fRewriter.replace(node, assignment, createGroupDescription(READ_ACCESS));
+ fReferencingGetter= true;
+ return false;
+ }
+ } else if (fSetter.isEmpty() && !fGetter.isEmpty()) {
+ // assignment operator with getter only. Ex f = 10;
+ // the getter only will not affect the assignment expression
+ rightHandSide.accept(this);
+ return false;
}
if (!fSetter.isEmpty()) {
// Write access.
@@ -169,10 +193,7 @@ class AccessAnalyzer extends ASTVisitor {
}
if (node.getOperator() == Assignment.Operator.ASSIGN) {
arguments.add((Expression) fRewriter.createCopyTarget(rightHandSide));
- }
-
- else if (!fGetter.isEmpty()) {
- // This is the compound assignment case: field+= 10;
+ } else if (!fGetter.isEmpty()) {
InfixExpression exp= ast.newInfixExpression();
exp.setOperator(ASTNodes.convertToInfixOperator(node.getOperator()));
MethodInvocation getter= ast.newMethodInvocation();

Back to the top