|
17 | 17 | package com.google.errorprone.bugpatterns; |
18 | 18 |
|
19 | 19 | import static com.google.common.collect.ImmutableList.toImmutableList; |
| 20 | +import static com.google.common.collect.Iterables.getOnlyElement; |
20 | 21 | import static com.google.errorprone.matchers.Description.NO_MATCH; |
21 | 22 | import static com.google.errorprone.matchers.Matchers.anyOf; |
22 | 23 | import static com.google.errorprone.matchers.Matchers.constructor; |
| 24 | +import static com.google.errorprone.util.ASTHelpers.getStartPosition; |
23 | 25 | import static com.google.errorprone.util.ASTHelpers.getSymbol; |
24 | 26 | import static com.google.errorprone.util.ASTHelpers.isConsideredFinal; |
25 | 27 | import static java.lang.String.format; |
@@ -158,41 +160,34 @@ public Void visitIdentifier(IdentifierTree tree, Void unused) { |
158 | 160 | if (parentTree instanceof MemberSelectTree memberSelectTree) { |
159 | 161 | var grandparent = |
160 | 162 | (MethodInvocationTree) getCurrentPath().getParentPath().getParentPath().getLeaf(); |
161 | | - if (memberSelectTree.getIdentifier().contentEquals("set")) { |
162 | | - fix.replace( |
163 | | - grandparent, |
164 | | - format( |
165 | | - "%s = %s", |
166 | | - state.getSourceForNode(tree), |
167 | | - state.getSourceForNode(grandparent.getArguments().get(0)))); |
168 | | - } else if (memberSelectTree.getIdentifier().contentEquals("get")) { |
169 | | - fix.replace(grandparent, state.getSourceForNode(tree)); |
170 | | - } else if (memberSelectTree.getIdentifier().contentEquals("getAndIncrement")) { |
171 | | - fix.replace(grandparent, format("%s++", state.getSourceForNode(tree))); |
172 | | - } else if (memberSelectTree.getIdentifier().contentEquals("getAndDecrement")) { |
173 | | - fix.replace(grandparent, format("%s--", state.getSourceForNode(tree))); |
174 | | - } else if (memberSelectTree.getIdentifier().contentEquals("incrementAndGet")) { |
175 | | - fix.replace(grandparent, format("++%s", state.getSourceForNode(tree))); |
176 | | - } else if (memberSelectTree.getIdentifier().contentEquals("decrementAndGet")) { |
177 | | - fix.replace(grandparent, format("--%s", state.getSourceForNode(tree))); |
178 | | - } else if (memberSelectTree.getIdentifier().contentEquals("compareAndSet")) { |
179 | | - fix.replace( |
180 | | - grandparent, |
181 | | - format( |
182 | | - "%s = %s", |
183 | | - state.getSourceForNode(tree), |
184 | | - state.getSourceForNode(grandparent.getArguments().get(1)))); |
185 | | - } else if (memberSelectTree.getIdentifier().contentEquals("addAndGet")) { |
186 | | - fix.replace( |
187 | | - grandparent, |
188 | | - format( |
189 | | - "%s += %s", |
190 | | - state.getSourceForNode(tree), |
191 | | - state.getSourceForNode(grandparent.getArguments().get(0)))); |
192 | | - } else { |
193 | | - fixable.set(false); |
| 163 | + String methodName = memberSelectTree.getIdentifier().toString(); |
| 164 | + int receiverEndPos = state.getEndPosition(memberSelectTree.getExpression()); |
| 165 | + int endPos = state.getEndPosition(grandparent); |
| 166 | + switch (methodName) { |
| 167 | + case "set" -> { |
| 168 | + var arg = grandparent.getArguments().getFirst(); |
| 169 | + fix.replace(receiverEndPos, getStartPosition(arg), " = ") |
| 170 | + .replace(state.getEndPosition(arg), endPos, ""); |
| 171 | + } |
| 172 | + case "get" -> fix.replace(receiverEndPos, endPos, ""); |
| 173 | + case "getAndIncrement" -> fix.replace(receiverEndPos, endPos, "++"); |
| 174 | + case "getAndDecrement" -> fix.replace(receiverEndPos, endPos, "--"); |
| 175 | + case "incrementAndGet" -> |
| 176 | + fix.prefixWith(memberSelectTree, "++").replace(receiverEndPos, endPos, ""); |
| 177 | + case "decrementAndGet" -> |
| 178 | + fix.prefixWith(memberSelectTree, "--").replace(receiverEndPos, endPos, ""); |
| 179 | + case "compareAndSet" -> { |
| 180 | + var arg = grandparent.getArguments().get(1); |
| 181 | + fix.replace(receiverEndPos, getStartPosition(arg), " = ") |
| 182 | + .replace(state.getEndPosition(arg), endPos, ""); |
| 183 | + } |
| 184 | + case "addAndGet" -> { |
| 185 | + var arg = getOnlyElement(grandparent.getArguments()); |
| 186 | + fix.replace(receiverEndPos, getStartPosition(arg), " += ") |
| 187 | + .replace(state.getEndPosition(arg), endPos, ""); |
| 188 | + } |
| 189 | + default -> fixable.set(false); |
194 | 190 | } |
195 | | - |
196 | 191 | } else { |
197 | 192 | fixable.set(false); |
198 | 193 | } |
|
0 commit comments