From 8c2457195e5214fb2b4e3f4be123c1c537956bac Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 23 Apr 2012 23:08:43 +0400 Subject: [PATCH] Fixed bug when ctrl+click on ArrayList.add() and other stuff navigated to alt-headers. #KT-1815 fixed --- .../libraries/JetClsNavigationPolicy.java | 9 +++++++++ .../LibraryNavigationRegressionTest.java | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetClsNavigationPolicy.java b/idea/src/org/jetbrains/jet/plugin/libraries/JetClsNavigationPolicy.java index a36799df39f..b510306b353 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetClsNavigationPolicy.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/JetClsNavigationPolicy.java @@ -34,6 +34,9 @@ public class JetClsNavigationPolicy implements ClsCustomNavigationPolicy { @Override @Nullable public PsiElement getNavigationElement(@NotNull ClsClassImpl clsClass) { + if (clsClass.getUserData(ClsClassImpl.DELEGATE_KEY) != null) { + return null; + } JetClass jetClass = (JetClass) getJetDeclarationByClsElement(clsClass); if (jetClass != null) { JetClass sourceClass = JetSourceNavigationHelper.getSourceClass(jetClass); @@ -47,6 +50,9 @@ public class JetClsNavigationPolicy implements ClsCustomNavigationPolicy { @Override @Nullable public PsiElement getNavigationElement(@NotNull ClsMethodImpl clsMethod) { + if (clsMethod.getParent().getUserData(ClsClassImpl.DELEGATE_KEY) != null) { + return null; + } JetDeclaration jetDeclaration = getJetDeclarationByClsElement(clsMethod); if (jetDeclaration instanceof JetProperty) { JetDeclaration sourceProperty = JetSourceNavigationHelper.getSourceProperty((JetProperty) jetDeclaration); @@ -66,6 +72,9 @@ public class JetClsNavigationPolicy implements ClsCustomNavigationPolicy { @Override @Nullable public PsiElement getNavigationElement(@NotNull ClsFieldImpl clsField) { + if (clsField.getParent().getUserData(ClsClassImpl.DELEGATE_KEY) != null) { + return null; + } return getJetDeclarationByClsElement(clsField); } diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/LibraryNavigationRegressionTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/LibraryNavigationRegressionTest.java index 0f8350ffd24..ac5873a882e 100644 --- a/idea/tests/org/jetbrains/jet/plugin/libraries/LibraryNavigationRegressionTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/LibraryNavigationRegressionTest.java @@ -16,7 +16,11 @@ package org.jetbrains.jet.plugin.libraries; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; @@ -51,6 +55,20 @@ public class LibraryNavigationRegressionTest extends LightCodeInsightFixtureTest ref.resolve().getNavigationElement(); } + /** + * Regression test against KT-1815 + */ + public void testRefToAltHeaders() { + String text = "fun foo(e : java.util.Map.Entry) { e.getKey(); }"; + myFixture.configureByText(JetFileType.INSTANCE, text); + PsiReference ref = myFixture.getFile().findReferenceAt(text.indexOf("getKey")); + PsiClass expectedClass = + JavaPsiFacade.getInstance(getProject()).findClass("java.util.Map.Entry", GlobalSearchScope.allScope(getProject())); + //noinspection ConstantConditions + PsiElement actualClass = ref.resolve().getNavigationElement().getParent(); + assertSame(expectedClass, actualClass); + } + @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() {