From 3bf031bdc29059424baf0eb7a67e67df8c2f642c Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 18 Sep 2017 15:07:34 +0700 Subject: [PATCH] ConvertFieldToAtomicIntention#isAvailable: check that getVariable() actually returns something Should fix EA-107511 - assert: ConvertFieldToAtomicIntention.invoke --- .../ConvertFieldToAtomicIntention.java | 3 +-- .../atomic/afterInLambdasAtWrite.java | 21 +++++++++++++++++++ .../atomic/beforeInLambdasAtWrite.java | 20 ++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 java/typeMigration/testData/intentions/atomic/afterInLambdasAtWrite.java create mode 100644 java/typeMigration/testData/intentions/atomic/beforeInLambdasAtWrite.java diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java index e640d861db36..24200700c39f 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java @@ -148,7 +148,6 @@ public class ConvertFieldToAtomicIntention extends PsiElementBaseIntentionAction else if (var instanceof PsiField) { ((PsiField)var).setInitializer(newInitializer); } - JavaCodeStyleManager.getInstance(var.getProject()).shortenClassReferences(var.getInitializer()); } modifierList.setModifierProperty(PsiModifier.FINAL, true); @@ -219,7 +218,7 @@ public class ConvertFieldToAtomicIntention extends PsiElementBaseIntentionAction @Override public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { - return myContext.isValid(); + return getVariable(element) != null; } @Override diff --git a/java/typeMigration/testData/intentions/atomic/afterInLambdasAtWrite.java b/java/typeMigration/testData/intentions/atomic/afterInLambdasAtWrite.java new file mode 100644 index 000000000000..36775351cf01 --- /dev/null +++ b/java/typeMigration/testData/intentions/atomic/afterInLambdasAtWrite.java @@ -0,0 +1,21 @@ +// "Convert to atomic" "true" + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.*; + +public class InLambdas +{ + public void test() + { + AtomicInteger x = new AtomicInteger(); + // Also active at write point if it causes a compilation error + Runnable r1 = () -> x.getAndIncrement(); + Runnable r2 = () -> x.addAndGet(2); + Runnable r3 = () -> x.updateAndGet(v -> v * 2); + Runnable r4 = () -> x.set(5); + System.out.println(x.updateAndGet(v -> v / 3)); + IntSupplier s = () -> { + return x.updateAndGet(v -> v * 2); + }; + } +} \ No newline at end of file diff --git a/java/typeMigration/testData/intentions/atomic/beforeInLambdasAtWrite.java b/java/typeMigration/testData/intentions/atomic/beforeInLambdasAtWrite.java new file mode 100644 index 000000000000..0a5ddd64b3c2 --- /dev/null +++ b/java/typeMigration/testData/intentions/atomic/beforeInLambdasAtWrite.java @@ -0,0 +1,20 @@ +// "Convert to atomic" "true" + +import java.util.function.*; + +public class InLambdas +{ + public void test() + { + int x = 0; + // Also active at write point if it causes a compilation error + Runnable r1 = () -> x++; + Runnable r2 = () -> x+=2; + Runnable r3 = () -> x*=2; + Runnable r4 = () -> x = 5; + System.out.println(x /= 3); + IntSupplier s = () -> { + return x *= 2; + }; + } +} \ No newline at end of file