diff options
| author | Kenneth Styrberg | 2019-04-18 11:14:39 +0000 |
|---|---|---|
| committer | Roland Grunberg | 2019-04-24 17:27:07 +0000 |
| commit | e4738e9a11af9e88998afc33430c33d179e103a0 (patch) | |
| tree | a825cc26b11c0884c7bd04b637e3e1cede9c5be3 | |
| parent | 2551b9bc3a4d24c23865b40afa7ef1d698d86131 (diff) | |
| download | eclipse.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.java | 31 |
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(); |
