diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index a82b31f8615c..3bea44ff6101 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -1169,7 +1169,7 @@ public class ExtractMethodProcessor implements MatchProvider { } }); } - else { + else if (!PsiUtil.isLanguageLevel8OrHigher(method)){ method.accept(new JavaRecursiveElementVisitor() { @Override public void visitReferenceExpression(PsiReferenceExpression expression) { final PsiElement resolved = expression.resolve(); diff --git a/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous.java new file mode 100644 index 000000000000..20edcc5e6b05 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous.java @@ -0,0 +1,20 @@ +class Box { + private void test(String str1, String str2) { + Data data = new Data() { + @Override + public String getA() { + return str1; + } + @Override + public String getB() { + return str2; + } + }; + System.out.println(data); + } + + static interface Data { + String getA(); + String getB(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java new file mode 100644 index 000000000000..86a55fec2408 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DontMakeParametersFinalDueToUsagesInsideAnonymous_after.java @@ -0,0 +1,27 @@ +import org.jetbrains.annotations.NotNull; + +class Box { + private void test(String str1, String str2) { + Data data = newMethod(str1, str2); + System.out.println(data); + } + + @NotNull + private Data newMethod(String str1, String str2) { + return new Data() { + @Override + public String getA() { + return str1; + } + @Override + public String getB() { + return str2; + } + }; + } + + static interface Data { + String getA(); + String getB(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index 1f174efff7be..edc560cb3e79 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -904,6 +904,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); } + public void testDontMakeParametersFinalDueToUsagesInsideAnonymous() throws Exception { + doTest(); + } + private void doTestDisabledParam() throws PrepareFailedException { final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()); settings.ELSE_ON_NEW_LINE = true;