From 0b4b515ad7cea187e05824ca8b3e69afb89cbf97 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 5 Sep 2012 16:20:48 +0400 Subject: [PATCH] navigate to several elements if there are many (not only in ambiguity case) --- .../jet/plugin/references/JetPsiReference.java | 4 ++++ idea/testData/resolve/SeveralOverrides.kt | 15 +++++++++++++++ .../jetbrains/jet/resolve/ResolveBaseTest.java | 3 +++ 3 files changed, 22 insertions(+) create mode 100644 idea/testData/resolve/SeveralOverrides.kt diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java index c7120a1e635..1001bcaaf20 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetPsiReference.java @@ -130,6 +130,10 @@ public abstract class JetPsiReference implements PsiPolyVariantReference { .getBindingContext(); Collection declarationDescriptors = bindingContext.get(AMBIGUOUS_REFERENCE_TARGET, myExpression); if (declarationDescriptors == null) { + List psiElements = BindingContextUtils.resolveToDeclarationPsiElements(bindingContext, myExpression); + if (!psiElements.isEmpty()) { + return PsiElementResolveResult.createResults(psiElements); + } List standardLibraryElements = resolveStandardLibrarySymbol(bindingContext); if (!standardLibraryElements.isEmpty()) { return PsiElementResolveResult.createResults(standardLibraryElements); diff --git a/idea/testData/resolve/SeveralOverrides.kt b/idea/testData/resolve/SeveralOverrides.kt new file mode 100644 index 00000000000..78f402bb27f --- /dev/null +++ b/idea/testData/resolve/SeveralOverrides.kt @@ -0,0 +1,15 @@ +trait A { + fun foo() +} + +trait B { + fun foo() +} + +trait C : A, B { + +} + +fun test(c: C) { + c.foo() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/ResolveBaseTest.java b/idea/tests/org/jetbrains/jet/resolve/ResolveBaseTest.java index 4c400dc8ccd..c3674a6c33a 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ResolveBaseTest.java +++ b/idea/tests/org/jetbrains/jet/resolve/ResolveBaseTest.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.resolve; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiPolyVariantReference; import com.intellij.psi.PsiReference; import com.intellij.psi.ResolveResult; @@ -78,10 +79,12 @@ public class ResolveBaseTest extends LightCodeInsightTestCase { final PsiPolyVariantReference variantReference = (PsiPolyVariantReference) psiReference; + PsiElement element = variantReference.resolve(); final ResolveResult[] results = variantReference.multiResolve(true); for (ResolveResult result : results) { assertNotNull(result); } + assertTrue("Nothing resolved by reference '" + psiReference.getElement().getText() + "'.", element != null || results.length > 0); } @NotNull