From 65b3be5903f5a694a738b867dedfbffbd01f6116 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Tue, 29 Mar 2011 15:04:07 +0400 Subject: [PATCH] IDEA-66339 Incorrect multiple resolve from anonymous constructor argument list --- .../typedef/GrAnonymousClassDefinitionImpl.java | 10 ++++++++++ .../groovy/lang/resolve/ResolvePropertyTest.groovy | 7 +++++++ .../property/anonymousClassFieldAndLocalVar/A.groovy | 8 ++++++++ 3 files changed, 25 insertions(+) create mode 100644 plugins/groovy/testdata/resolve/property/anonymousClassFieldAndLocalVar/A.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java index 89a0bffc0c73..ffa1ea52cc32 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java @@ -19,6 +19,7 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef; import com.intellij.lang.ASTNode; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.reference.SoftReference; import org.jetbrains.annotations.NonNls; @@ -132,6 +133,15 @@ public class GrAnonymousClassDefinitionImpl extends GrTypeDefinitionImpl impleme return getBaseClassReferenceGroovy().getReferenceNameElement(); } + @Override + public boolean processDeclarations(@NotNull PsiScopeProcessor processor, + @NotNull ResolveState state, + @Nullable PsiElement lastParent, + @NotNull PsiElement place) { + if (lastParent instanceof GrArgumentList) return true; + return super.processDeclarations(processor, state, lastParent, place); + } + @Override public boolean isAnonymous() { return true; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolvePropertyTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolvePropertyTest.groovy index 25beed1bdac1..745d7226f906 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolvePropertyTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/ResolvePropertyTest.groovy @@ -29,6 +29,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAc import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstant import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.GrTopStatement +import org.jetbrains.plugins.groovy.refactoring.GroovyRefactoringUtil import org.jetbrains.plugins.groovy.util.TestUtils import com.intellij.psi.* @@ -640,4 +641,10 @@ setFoo(2) public void testF1property() { assertInstanceOf resolve("A.groovy"), GrAccessorMethod } + + public void testAnonymousClassFieldAndLocalVar() { + final PsiElement resolved = resolve("A.groovy") + assertInstanceOf resolved, PsiVariable + assertTrue GroovyRefactoringUtil.isLocalVariable(resolved) + } } diff --git a/plugins/groovy/testdata/resolve/property/anonymousClassFieldAndLocalVar/A.groovy b/plugins/groovy/testdata/resolve/property/anonymousClassFieldAndLocalVar/A.groovy new file mode 100644 index 000000000000..dc067530d033 --- /dev/null +++ b/plugins/groovy/testdata/resolve/property/anonymousClassFieldAndLocalVar/A.groovy @@ -0,0 +1,8 @@ +class Goo { + Goo(p) {} + def foo = 2 +} + +def foo = 3 + +println new Goo(foo) {} \ No newline at end of file