From 86e64cf1bf7286f4dd8b6bbc5692f17f3c27bb95 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Tue, 4 Oct 2011 15:04:13 +0400 Subject: [PATCH] IDEA-74663 String injections don't override it parameter --- .../psi/impl/statements/blocks/GrClosableBlockImpl.java | 7 ++++++- .../plugins/groovy/lang/resolve/ResolveMethodTest.groovy | 6 ++++++ .../plugins/groovy/lang/resolve/TypeInferenceTest.java | 8 ++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java index 14e3a052885b..6e437a6097f3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/blocks/GrClosableBlockImpl.java @@ -35,6 +35,7 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrStringInjection; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; @@ -85,7 +86,7 @@ public class GrClosableBlockImpl extends GrBlockImpl implements GrClosableBlock PsiElement current = place; boolean it_already_processed = false; while (current != this && current != null) { - if (current instanceof GrClosableBlock && !((GrClosableBlock)current).hasParametersSection()) { + if (current instanceof GrClosableBlock && !((GrClosableBlock)current).hasParametersSection() && !(current.getParent() instanceof GrStringInjection)) { it_already_processed = true; break; } @@ -184,6 +185,10 @@ public class GrClosableBlockImpl extends GrBlockImpl implements GrClosableBlock } public GrParameter[] getSyntheticItParameter() { + if (getParent() instanceof GrStringInjection) { + return GrParameter.EMPTY_ARRAY; + } + GrParameter[] res = mySyntheticItParameter; if (res == null) { res = new GrParameter[]{new ClosureSyntheticParameter(this)}; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy index 1c46a1745fdf..0f7a68d198a4 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolveMethodTest.groovy @@ -809,4 +809,10 @@ def test() { assertNotNull(ref.resolve()) } + void testStringInjectionDontOverrideItParameter() { + def ref = configureByText(""" +[2, 3, 4].collect {"\${it.toBigDecimal()}"} +""") + assertNotNull(ref.resolve()) + } } 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 78362a0d0755..37a1d97d5c67 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 @@ -229,11 +229,11 @@ public class TypeInferenceTest extends GroovyResolveTestCase { public void testIncMethod() { assertTypeEquals(JAVA_LANG_INTEGER, "A.groovy"); } - + public void testDGMFind() { assertTypeEquals("java.io.File", "a.groovy"); } - + public void testMultiTypeParameter() { assertTypeEquals("X | Y", "a.groovy"); } @@ -241,4 +241,8 @@ public class TypeInferenceTest extends GroovyResolveTestCase { public void testTypeArgsInAccessor() { assertTypeEquals("Foo", "a.groovy"); } + + public void testSingleParameterInStringInjection() { + assertTypeEquals("java.util.StringBuilder", "a.groovy"); + } }