From 3c087965f108a44bbffc92f6a999f1e64d85e619 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 8 May 2013 18:15:55 +0400 Subject: [PATCH] Add presentation renderer for field declared in constructor --- .../jetbrains/jet/lang/psi/JetParameter.java | 7 ++++- .../jetbrains/jet/lang/psi/JetPsiUtil.java | 7 ++++- idea/src/META-INF/plugin.xml | 2 ++ .../presentation/JetParameterPresenter.java | 28 +++++++++++++++++++ ...ConstructorPropertyOverriddenNavigation.kt | 12 ++++++++ .../navigation/JetGotoImplementationTest.java | 4 +++ 6 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/presentation/JetParameterPresenter.java create mode 100644 idea/testData/navigation/implementations/ConstructorPropertyOverriddenNavigation.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java index 58ed3e5bf89..296ef03e3f4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java @@ -17,6 +17,8 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.navigation.ItemPresentation; +import com.intellij.navigation.ItemPresentationProviders; import com.intellij.psi.stubs.IStubElementType; import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; @@ -107,5 +109,8 @@ public class JetParameter extends JetNamedDeclarationStub { return getNode().findChildByType(JetTokens.VAR_KEYWORD); } - + @Override + public ItemPresentation getPresentation() { + return ItemPresentationProviders.getItemPresentation(this); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 865bcc2622d..3228d0f9e32 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -196,11 +196,16 @@ public class JetPsiUtil { else if (parent instanceof JetNamedFunction || parent instanceof JetClass) { firstPart = getFQName((JetNamedDeclaration) parent); } + else if (namedDeclaration instanceof JetParameter) { + if (((JetParameter) namedDeclaration).getValOrVarNode() != null && parent != null && parent.getParent() instanceof JetClassOrObject) { + firstPart = getFQName((JetClassOrObject) parent.getParent()); + } + } else if (parent instanceof JetObjectDeclaration) { if (parent.getParent() instanceof JetClassObject) { JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(parent, JetClassOrObject.class); if (classOrObject != null) { - firstPart = getFQName((JetNamedDeclaration) classOrObject); + firstPart = getFQName(classOrObject); } } else { diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index a942b5d6e55..f1e7fd11e46 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -219,6 +219,8 @@ forClass="org.jetbrains.jet.lang.psi.JetClass"/> + diff --git a/idea/src/org/jetbrains/jet/plugin/presentation/JetParameterPresenter.java b/idea/src/org/jetbrains/jet/plugin/presentation/JetParameterPresenter.java new file mode 100644 index 00000000000..54b34f3be1a --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/presentation/JetParameterPresenter.java @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.presentation; + +import com.intellij.navigation.ItemPresentation; +import com.intellij.navigation.ItemPresentationProvider; +import org.jetbrains.jet.lang.psi.JetParameter; + +public class JetParameterPresenter implements ItemPresentationProvider { + @Override + public ItemPresentation getPresentation(JetParameter item) { + return new JetDefaultNamedDeclarationPresentation(item); + } +} diff --git a/idea/testData/navigation/implementations/ConstructorPropertyOverriddenNavigation.kt b/idea/testData/navigation/implementations/ConstructorPropertyOverriddenNavigation.kt new file mode 100644 index 00000000000..a7b04f331b2 --- /dev/null +++ b/idea/testData/navigation/implementations/ConstructorPropertyOverriddenNavigation.kt @@ -0,0 +1,12 @@ +package testing + +open class Test(open var some: Int) + +class OtherTestInConstructor(override var some: Int): Test(some) + +class OtherTestInBody(some: Int, other: String): Test(some) { + override var some: Int = some +} + +// REF: (testing.OtherTestInConstructor).some +// REF: (testing.OtherTestInBody).some \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/navigation/JetGotoImplementationTest.java b/idea/tests/org/jetbrains/jet/plugin/navigation/JetGotoImplementationTest.java index 27e2f18ef46..dd81a32003a 100644 --- a/idea/tests/org/jetbrains/jet/plugin/navigation/JetGotoImplementationTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/navigation/JetGotoImplementationTest.java @@ -41,6 +41,10 @@ public class JetGotoImplementationTest extends LightCodeInsightTestCase { doTest(); } + public void testConstructorPropertyOverriddenNavigation() { + doTest(); + } + @NotNull @Override protected String getTestDataPath() {