From be6d68741b325dbbeb5a6fde39f9b5dfc91a9fc9 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 28 May 2014 21:59:59 +0400 Subject: [PATCH] Show delegated methods when "Show inherited" enabled in file structure view --- .../KotlinInheritedMembersNodeProvider.kt | 13 +++++++++---- .../InheritedDelegationMethods.Data.kt | 9 +++++++++ .../fileStructure/InheritedDelegationMethods.after | 7 +++++++ .../fileStructure/InheritedDelegationMethods.kt | 3 +++ .../KotlinFileStructureTestGenerated.java | 5 +++++ 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 idea/testData/structureView/fileStructure/InheritedDelegationMethods.Data.kt create mode 100644 idea/testData/structureView/fileStructure/InheritedDelegationMethods.after create mode 100644 idea/testData/structureView/fileStructure/InheritedDelegationMethods.kt diff --git a/idea/src/org/jetbrains/jet/plugin/structureView/KotlinInheritedMembersNodeProvider.kt b/idea/src/org/jetbrains/jet/plugin/structureView/KotlinInheritedMembersNodeProvider.kt index 55bffc226ec..435c6c4d505 100644 --- a/idea/src/org/jetbrains/jet/plugin/structureView/KotlinInheritedMembersNodeProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/structureView/KotlinInheritedMembersNodeProvider.kt @@ -20,6 +20,7 @@ import com.intellij.ide.util.treeView.smartTree.TreeElement import com.intellij.ide.util.InheritedMembersNodeProvider import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil +import org.jetbrains.jet.lang.psi.JetDeclaration import org.jetbrains.jet.lang.resolve.BindingContext import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import java.util.ArrayList @@ -47,11 +48,15 @@ public class KotlinInheritedMembersNodeProvider: InheritedMembersNodeProvider { + val superTypeMember = DescriptorToDeclarationUtil.getDeclaration(project, memberDescriptor, context) + if (superTypeMember is NavigatablePsiElement) { + children.add(JetStructureViewElement(superTypeMember, memberDescriptor, true)) + } + } } } diff --git a/idea/testData/structureView/fileStructure/InheritedDelegationMethods.Data.kt b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.Data.kt new file mode 100644 index 00000000000..375d9192cd1 --- /dev/null +++ b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.Data.kt @@ -0,0 +1,9 @@ +trait Some { + fun first() + fun second() +} + +class ClassSome: Some { + override fun first() {} + override fun second() {} +} \ No newline at end of file diff --git a/idea/testData/structureView/fileStructure/InheritedDelegationMethods.after b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.after new file mode 100644 index 00000000000..aef7e2c4265 --- /dev/null +++ b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.after @@ -0,0 +1,7 @@ +-InheritedDelegationMethods.kt + -Test + equals(Any?): Boolean location=→Any + first(): Unit location=→Some + hashCode(): Int location=→Any + second(): Unit location=→Some + toString(): String location=→Any diff --git a/idea/testData/structureView/fileStructure/InheritedDelegationMethods.kt b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.kt new file mode 100644 index 00000000000..a48ef3f43f9 --- /dev/null +++ b/idea/testData/structureView/fileStructure/InheritedDelegationMethods.kt @@ -0,0 +1,3 @@ +class Test: Some by ClassSome() + +// WITH_INHERITED \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/structureView/KotlinFileStructureTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/structureView/KotlinFileStructureTestGenerated.java index de73ade3f5c..ef791bcd5f2 100644 --- a/idea/tests/org/jetbrains/jet/plugin/structureView/KotlinFileStructureTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/structureView/KotlinFileStructureTestGenerated.java @@ -56,6 +56,11 @@ public class KotlinFileStructureTestGenerated extends AbstractKotlinFileStructur doTest("idea/testData/structureView/fileStructure/EmptyFile.kt"); } + @TestMetadata("InheritedDelegationMethods.kt") + public void testInheritedDelegationMethods() throws Exception { + doTest("idea/testData/structureView/fileStructure/InheritedDelegationMethods.kt"); + } + @TestMetadata("InheritedInnerClasses.kt") public void testInheritedInnerClasses() throws Exception { doTest("idea/testData/structureView/fileStructure/InheritedInnerClasses.kt");