diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceClosureParameterProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceClosureParameterProcessor.java
index 7296e0ce54bd..c99fcb384da1 100644
--- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceClosureParameterProcessor.java
+++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduce/parameter/GrIntroduceClosureParameterProcessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.refactoring.introduce.parameter;
import com.intellij.codeInsight.ChangeContextUtil;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Ref;
import com.intellij.psi.*;
@@ -24,6 +25,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.search.searches.MethodReferencesSearch;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtilBase;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.IntroduceParameterRefactoring;
import com.intellij.refactoring.RefactoringBundle;
@@ -68,6 +70,8 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.signatures.GrClosureSignatureU
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringBundle;
import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil;
+import org.jetbrains.plugins.groovy.refactoring.introduce.GrIntroduceHandlerBase;
+import org.jetbrains.plugins.groovy.refactoring.introduce.StringPartInfo;
import org.jetbrains.plugins.groovy.refactoring.introduce.parameter.java2groovy.FieldConflictsResolver;
import org.jetbrains.plugins.groovy.refactoring.introduce.parameter.java2groovy.OldReferencesResolver;
import org.jetbrains.plugins.groovy.refactoring.util.AnySupers;
@@ -95,7 +99,12 @@ public class GrIntroduceClosureParameterProcessor extends BaseRefactoringProcess
toReplaceIn = (GrClosableBlock)mySettings.getToReplaceIn();
toSearchFor = mySettings.getToSearchFor();
- myParameterInitializer = new GrExpressionWrapper(mySettings.getExpression());
+
+ final StringPartInfo info = settings.getStringPartInfo();
+ final GrExpression expression = info != null ?
+ GrIntroduceHandlerBase.generateExpressionFromStringPart(info, settings.getProject()) :
+ mySettings.getExpression();
+ myParameterInitializer = new GrExpressionWrapper(expression);
}
@NotNull
@@ -303,6 +312,16 @@ public class GrIntroduceClosureParameterProcessor extends BaseRefactoringProcess
}
}
}
+
+ final StringPartInfo info = settings.getStringPartInfo();
+ if (info != null) {
+ final GrExpression expr = GrIntroduceHandlerBase.processLiteral(settings.getName(), info, settings.getProject());
+ final Editor editor = PsiUtilBase.findEditor(expr);
+ if (editor != null) {
+ editor.getSelectionModel().removeSelection();
+ editor.getCaretModel().moveToOffset(expr.getTextRange().getEndOffset());
+ }
+ }
}
public static void processExternalUsages(UsageInfo[] usages, GrIntroduceParameterSettings settings, PsiElement expression) {
diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.groovy
similarity index 73%
rename from plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.java
rename to plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.groovy
index 978e36925632..ec2e47ef89a3 100644
--- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.java
+++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/introduceParameter/GrIntroduceParameterInClosureTest.groovy
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.jetbrains.plugins.groovy.refactoring.introduceParameter;
-
-import com.intellij.psi.impl.source.PostprocessReformattingAspect;
-import com.intellij.refactoring.IntroduceParameterRefactoring;
-import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.plugins.groovy.util.TestUtils;
+package org.jetbrains.plugins.groovy.refactoring.introduceParameter
+import com.intellij.psi.impl.source.PostprocessReformattingAspect
+import com.intellij.refactoring.IntroduceParameterRefactoring
+import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
+import org.jetbrains.annotations.Nullable
+import org.jetbrains.plugins.groovy.util.TestUtils
/**
* @author Max Medvedev
*/
@@ -45,6 +44,24 @@ public class GrIntroduceParameterInClosureTest extends LightCodeInsightFixtureTe
myFixture.checkResultByFile(getTestName(false) + "_after.groovy");
}
+ private void doTest(final int replaceFieldsWithGetters,
+ final boolean removeUnusedParameters,
+ final boolean declareFinal,
+ @Nullable final String conflicts,
+ final boolean generateDelegate,
+ String before,
+ String after) {
+ myFixture.configureByText('before.groovy', before);
+
+ GrIntroduceParameterTest.execute(replaceFieldsWithGetters, removeUnusedParameters, declareFinal, conflicts, generateDelegate,
+ getProject(), myFixture.getEditor(), myFixture.getFile());
+
+ PostprocessReformattingAspect.getInstance(getProject()).doPostponedFormatting();
+ myFixture.getEditor().getSelectionModel().removeSelection();
+
+ myFixture.checkResult(after);
+ }
+
public void testSimpleClosure() {
doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, false, null, false);
}
@@ -96,4 +113,18 @@ public class GrIntroduceParameterInClosureTest extends LightCodeInsightFixtureTe
public void testDelegateRemoveUnusedParam() {
doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, true, false, null, true);
}*/
+
+ void testStringPart0() {
+ doTest(IntroduceParameterRefactoring.REPLACE_FIELDS_WITH_GETTERS_NONE, false, false, null, false, '''\
+def cl = {
+ print 'abc'
+}
+cl()
+''', '''\
+def cl = {String anObject ->
+ print 'a' + anObject + 'c'
+}
+cl('b')
+''')
+ }
}