From 19210dd1b5d9ec098687e2b523af722127c4ca8e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 29 Jan 2015 17:36:13 +0300 Subject: [PATCH] encapsulate fields: raise conflict if postfix/prefix expression result value is used further (IDEA-131841) --- .../EncapsulateFieldsProcessor.java | 14 +++++++++++++- .../after/Test.java | 6 ++++++ .../before/Test.java | 6 ++++++ .../refactoring/EncapsulateFieldsTest.java | 4 ++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/after/Test.java create mode 100644 java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/before/Test.java diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java index 88368dec683c..c72f7c3e7d0c 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsProcessor.java @@ -167,7 +167,19 @@ public class EncapsulateFieldsProcessor extends BaseRefactoringProcessor { } } } - return showConflicts(conflicts, refUsages.get()); + + UsageInfo[] infos = refUsages.get(); + for (UsageInfo info : infos) { + PsiElement element = info.getElement(); + if (element != null) { + PsiElement parent = element.getParent(); + if (RefactoringUtil.isPlusPlusOrMinusMinus(parent) && !(parent.getParent() instanceof PsiExpressionStatement)) { + conflicts.putValue(parent, "Unable to proceed with postfix/prefix expression when it's result type is used"); + } + } + } + + return showConflicts(conflicts, infos); } private void checkExistingMethods(MultiMap conflicts, boolean isGetter) { diff --git a/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/after/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/after/Test.java new file mode 100644 index 000000000000..0cc15be5b8dd --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/after/Test.java @@ -0,0 +1,6 @@ +public class Test { + int i; + + { + int k = i++; + } diff --git a/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/before/Test.java b/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/before/Test.java new file mode 100644 index 000000000000..0cc15be5b8dd --- /dev/null +++ b/java/java-tests/testData/refactoring/encapsulateFields/postfixExpressionUsedInAssignment/before/Test.java @@ -0,0 +1,6 @@ +public class Test { + int i; + + { + int k = i++; + } diff --git a/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java index e69948fa8795..4f17545a9c65 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/EncapsulateFieldsTest.java @@ -52,6 +52,10 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{ doTest("i", "There is already method Super setI(int) which differs from setter setI by return type only"); } + public void testPostfixExpressionUsedInAssignment() throws Exception { + doTest("i", "Unable to proceed with postfix/prefix expression when it's result type is used"); + } + public void testHideOverriderMethod() throws Exception { doTest("i", "A", "There is already a method B.getI() which would hide generated getter for a.i"); }