From 7e993a03532bfcd18649d8facbd608137e8d873d Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Fri, 23 Aug 2013 12:17:00 +0400 Subject: [PATCH] IDEA-112560 process only applicable mixins to a ref --- .../groovy/lang/psi/util/GdkMethodUtil.java | 3 ++- .../lang/resolve/GroovyResolveTestCase.groovy | 2 +- .../lang/resolve/ResolveMethodTest.groovy | 24 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GdkMethodUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GdkMethodUtil.java index 74443e44012d..2f757a89ebf4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GdkMethodUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/GdkMethodUtil.java @@ -55,6 +55,7 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.GrRefer import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrGdkMethodImpl; import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrLightMethodBuilder; +import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; import org.jetbrains.plugins.groovy.lang.resolve.noncode.MixinMemberContributor; import org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint; import org.jetbrains.plugins.groovy.lang.resolve.processors.ResolverProcessor; @@ -226,7 +227,7 @@ public class GdkMethodUtil { final DelegatingScopeProcessor delegate = new MixinMemberContributor.MixinProcessor(processor, subjectType, qualifier); for (GrMethod method : methods) { - delegate.execute(method, ResolveState.initial()); + ResolveUtil.processElement(delegate, method, state); } } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/GroovyResolveTestCase.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/GroovyResolveTestCase.groovy index 6407c317daae..c481df10fa97 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/GroovyResolveTestCase.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/GroovyResolveTestCase.groovy @@ -95,7 +95,7 @@ public abstract class GroovyResolveTestCase extends LightGroovyTestCase { final ref = configureByText(text) assertNotNull(ref) final resolved = ref.resolve() - assertInstanceOf(resolved, type) + if (type != null) assertInstanceOf(resolved, type) return resolved } 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 8dc669709410..f6ee5f0a471d 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 @@ -1431,6 +1431,30 @@ class _a { ''', PsiMethod) } + void testRuntimeMixin22() { + assertNull resolveByText('''\ +class ReentrantLock {} + +ReentrantLock.metaClass.withLock = { nestedCode -> } + +new ReentrantLock().withLock { + foo(3) +} +''') + } + + void testRuntimeMixin23() { + assertNotNull resolveByText('''\ +class ReentrantLock {} + +ReentrantLock.metaClass.withLock = { nestedCode -> } + +new ReentrantLock().withLock { + withLock(2) +} +''') + } + void testRunnableVsCallable() { final PsiMethod method = resolveByText('''\ import java.util.concurrent.Callable