diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/ClosureParameterEnhancer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/ClosureParameterEnhancer.java index e111f2f34773..9410c7bf77dd 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/ClosureParameterEnhancer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/ClosureParameterEnhancer.java @@ -13,6 +13,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.arithmetic.GrRangeExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection; import org.jetbrains.plugins.groovy.lang.psi.impl.GrRangeType; import org.jetbrains.plugins.groovy.lang.psi.impl.GrTupleType; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; @@ -85,6 +86,10 @@ public class ClosureParameterEnhancer extends AbstractClosureParameterEnhancer { @Nullable protected PsiType getClosureParameterType(GrClosableBlock closure, int index) { PsiElement parent = closure.getParent(); + if (parent instanceof GrStringInjection && index == 0) { + return TypesUtil.createTypeByFQClassName(CommonClassNames.JAVA_LANG_STRING_BUILDER, closure); + } + if (parent instanceof GrArgumentList) parent = parent.getParent(); if (!(parent instanceof GrMethodCall)) { return null; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java index 37a1d97d5c67..b5efb28857a1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/TypeInferenceTest.java @@ -243,6 +243,6 @@ public class TypeInferenceTest extends GroovyResolveTestCase { } public void testSingleParameterInStringInjection() { - assertTypeEquals("java.util.StringBuilder", "a.groovy"); + assertTypeEquals("java.lang.StringBuilder", "a.groovy"); } } diff --git a/plugins/groovy/testdata/resolve/inference/singleParameterInStringInjection/a.groovy b/plugins/groovy/testdata/resolve/inference/singleParameterInStringInjection/a.groovy new file mode 100644 index 000000000000..5be6015b5223 --- /dev/null +++ b/plugins/groovy/testdata/resolve/inference/singleParameterInStringInjection/a.groovy @@ -0,0 +1 @@ +[2, 3, 4].collect {"${builder -> builder.append(it)}"} \ No newline at end of file