From b950ee85623a944fcc9b9b7f0bef764f1d3e87ee Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 31 May 2012 20:13:01 +0400 Subject: [PATCH] extract method: no need to declare variables after call when expression was extracted --- .../extractMethod/ExtractMethodProcessor.java | 1 + .../VarDeclAfterExpressionExtraction.java | 34 +++++++++++++++++ ...arDeclAfterExpressionExtraction_after.java | 38 +++++++++++++++++++ .../refactoring/ExtractMethodTest.java | 3 ++ 4 files changed, 76 insertions(+) create mode 100644 java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java create mode 100644 java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java 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 41bbe91ca43d..f6895cc4fe35 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -1157,6 +1157,7 @@ public class ExtractMethodProcessor implements MatchProvider { } protected void declareNecessaryVariablesAfterCall(PsiVariable outputVariable) throws IncorrectOperationException { + if (myHasExpressionOutput) return; List usedVariables = myControlFlowWrapper.getUsedVariables(); Collection reassigned = myControlFlowWrapper.getInitializedTwice(); for (PsiVariable variable : usedVariables) { diff --git a/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java new file mode 100644 index 000000000000..a757c44cdfc0 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction.java @@ -0,0 +1,34 @@ +class BasicLazyResolveTest { + + + public void test() { + + Object session = new Object() { + +/* + public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) { + final JetClass jetClass = (JetClass) jetClassOrObject; + return new ClassMemberDeclarationProvider() {*/ + + + /* private List filter(List list, final Class t, final Name name) { + //noinspection unchecked + return (List) Lists.newArrayList(Collections2.filter(list, new Predicate() { + @Override + public boolean apply(D d) { + return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name); + } + })); + }*/ + + + /* }; + }*/ + }; + + String packageDescriptor = session.toString(); + + } + + +} diff --git a/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java new file mode 100644 index 000000000000..cb7aeffa679d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/VarDeclAfterExpressionExtraction_after.java @@ -0,0 +1,38 @@ +class BasicLazyResolveTest { + + + public void test() { + + Object session = newMethod(); + + String packageDescriptor = session.toString(); + + } + + private Object newMethod() { + return new Object() { + +/* + public ClassMemberDeclarationProvider getClassMemberDeclarationProvider(JetClass jetClassOrObject) { + final JetClass jetClass = (JetClass) jetClassOrObject; + return new ClassMemberDeclarationProvider() {*/ + + + /* private List filter(List list, final Class t, final Name name) { + //noinspection unchecked + return (List) Lists.newArrayList(Collections2.filter(list, new Predicate() { + @Override + public boolean apply(D d) { + return t.isInstance(d) && ((JetNamed) d).getNameAsName().equals(name); + } + })); + }*/ + + + /* }; + }*/ + }; + } + + +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index fba5f90a20fa..123b3e4bedad 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -194,6 +194,9 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doTest(); } + public void testVarDeclAfterExpressionExtraction() throws Exception { + doTest(); + } public void testFinalParamUsedInsideAnon() throws Exception { CodeStyleSettingsManager.getSettings(getProject()).GENERATE_FINAL_PARAMETERS = false;