convert to atomic/thread-local intentions: fix migrated value assignment conversion IDEA-194426

This commit is contained in:
Dmitry Batkovich
2018-07-05 16:51:07 +03:00
parent 23965ceb2f
commit 31f8ace2b7
6 changed files with 48 additions and 2 deletions
@@ -178,7 +178,9 @@ public class AtomicConversionRule extends TypeConversionRule {
if (parent instanceof PsiAssignmentExpression) {
final IElementType operationSign = ((PsiAssignmentExpression)parent).getOperationTokenType();
if (operationSign == JavaTokenType.EQ) {
return new TypeConversionDescriptor("$qualifier$ = $val$", "$qualifier$.set($val$)", (PsiAssignmentExpression)parent);
boolean rightInfected = ((PsiAssignmentExpression)parent).getLExpression() == context;
String replacement = rightInfected ? "$qualifier$ = $val$.get()" : "$qualifier$.set($val$)";
return new TypeConversionDescriptor("$qualifier$ = $val$", replacement, (PsiAssignmentExpression)parent);
}
}
@@ -89,7 +89,9 @@ public class ThreadLocalConversionRule extends TypeConversionRule {
if (parent instanceof PsiAssignmentExpression) {
final IElementType operationSign = ((PsiAssignmentExpression)parent).getOperationTokenType();
if (operationSign == JavaTokenType.EQ) {
return new TypeConversionDescriptor("$qualifier$ = $val$", "$qualifier$.set(" + toBoxed("$val$", from, context)+")", (PsiAssignmentExpression)parent);
boolean rightInfected = ((PsiAssignmentExpression)parent).getLExpression() == context;
String replacement = rightInfected ? "$qualifier$ = $val$.get()" : "$qualifier$.set(" + toBoxed("$val$", from, context) + ")";
return new TypeConversionDescriptor("$qualifier$ = $val$", replacement, (PsiAssignmentExpression)parent);
}
}
@@ -0,0 +1,12 @@
import java.util.concurrent.atomic.AtomicInteger;
// "Convert to atomic" "true"
class X {
private static final AtomicInteger count = new AtomicInteger(); // convert me
private final int index;
X() {
count.getAndIncrement();
index = count.get();
}
}
@@ -0,0 +1,10 @@
// "Convert to atomic" "true"
class X {
private static int co<caret>unt = 0; // convert me
private final int index;
X() {
count++;
index = count;
}
}
@@ -0,0 +1,10 @@
// "Convert to ThreadLocal" "true"
class X {
private static final ThreadLocal<Integer> count = ThreadLocal.withInitial(() -> 0); // convert me
private final int index;
X() {
count.set(count.get() + 1);
index = count.get();
}
}
@@ -0,0 +1,10 @@
// "Convert to ThreadLocal" "true"
class X {
private static int co<caret>unt = 0; // convert me
private final int index;
X() {
count++;
index = count;
}
}