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"); }