From 6ad345299f8276afa8cf5673fa9439449831b644 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 23 Aug 2013 21:04:22 +0400 Subject: [PATCH] show conflict on invert boolean and method references (IDEA-112572) --- .../invertBoolean/InvertBooleanProcessor.java | 13 +++++++++++++ .../refactoring/invertBoolean/methodRefs.java | 14 ++++++++++++++ .../intellij/refactoring/InvertBooleanTest.java | 9 +++++++++ 3 files changed, 36 insertions(+) create mode 100644 java/java-tests/testData/refactoring/invertBoolean/methodRefs.java diff --git a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java index b859be9299ac..0b84dfe31917 100644 --- a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java @@ -33,6 +33,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.Query; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.HashSet; +import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -69,6 +70,18 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor { @Override protected boolean preprocessUsages(Ref refUsages) { + final MultiMap conflicts = new MultiMap(); + for (UsageInfo info : myToInvert.keySet()) { + final PsiElement element = info.getElement(); + if (element instanceof PsiMethodReferenceExpression) { + conflicts.putValue(element, "Method is used in method reference expression"); + } + } + + if (!conflicts.isEmpty()) { + return showConflicts(conflicts, null); + } + if (myRenameProcessor.preprocessUsages(refUsages)) { prepareSuccessful(); return true; diff --git a/java/java-tests/testData/refactoring/invertBoolean/methodRefs.java b/java/java-tests/testData/refactoring/invertBoolean/methodRefs.java new file mode 100644 index 000000000000..b7477fc316ef --- /dev/null +++ b/java/java-tests/testData/refactoring/invertBoolean/methodRefs.java @@ -0,0 +1,14 @@ +abstract class A{ + static boolean isBool() { + return false; + } + + + interface I { + boolean b(); + } + + { + I i = A::isBool; + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java index 236ac1a82ee5..175577041eb9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InvertBooleanTest.java @@ -30,6 +30,15 @@ public class InvertBooleanTest extends LightRefactoringTestCase { public void testInnerClasses() throws Exception {doTest();} public void testAnonymousClasses() throws Exception {doTest();} + public void testMethodRefs() throws Exception { + try { + doTest(); + fail("Conflict expected."); + } + catch (BaseRefactoringProcessor.ConflictsInTestsException e) { + assertEquals("Method is used in method reference expression", e.getMessage()); + } + } private void doTest() throws Exception { configureByFile(TEST_ROOT + getTestName(true) + ".java");