From 8ff0814221dc0fe78146dfca49593928b3bb840a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 24 Aug 2016 20:15:00 +0200 Subject: [PATCH] show local functions in structure view #KT-13473 Fixed --- .../structureView/KotlinStructureViewElement.kt | 17 +++++++++++++++++ .../fileStructure/LocalElements.after | 5 +++++ .../fileStructure/LocalElements.kt | 8 ++++++++ .../KotlinFileStructureTestGenerated.java | 6 ++++++ 4 files changed, 36 insertions(+) create mode 100644 idea/testData/structureView/fileStructure/LocalElements.after create mode 100644 idea/testData/structureView/fileStructure/LocalElements.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt index f35ebc8ce4b..0fc0a6dbc54 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt @@ -89,6 +89,23 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement, is KtFile -> element.declarations is KtClass -> element.getPrimaryConstructorParameters().filter { it.hasValOrVar() } + element.declarations is KtClassOrObject -> element.declarations + is KtFunction -> element.collectLocalDeclarations() else -> emptyList() } + + private fun KtFunction.collectLocalDeclarations(): List { + val result = mutableListOf() + + acceptChildren(object : KtTreeVisitorVoid() { + override fun visitClassOrObject(classOrObject: KtClassOrObject) { + result.add(classOrObject) + } + + override fun visitNamedFunction(function: KtNamedFunction) { + result.add(function) + } + }) + + return result + } } diff --git a/idea/testData/structureView/fileStructure/LocalElements.after b/idea/testData/structureView/fileStructure/LocalElements.after new file mode 100644 index 00000000000..3c5f427d3a2 --- /dev/null +++ b/idea/testData/structureView/fileStructure/LocalElements.after @@ -0,0 +1,5 @@ +-LocalElements.kt + -foo(): Unit + bar(): Unit + -X + xyzzy(): Unit diff --git a/idea/testData/structureView/fileStructure/LocalElements.kt b/idea/testData/structureView/fileStructure/LocalElements.kt new file mode 100644 index 00000000000..2b4c0abb76c --- /dev/null +++ b/idea/testData/structureView/fileStructure/LocalElements.kt @@ -0,0 +1,8 @@ +fun foo() { + fun bar() { } + + class X { + fun xyzzy() { + } + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java index 96b0bafadd2..adf484ece1b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java @@ -113,6 +113,12 @@ public class KotlinFileStructureTestGenerated extends AbstractKotlinFileStructur doTest(fileName); } + @TestMetadata("LocalElements.kt") + public void testLocalElements() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/structureView/fileStructure/LocalElements.kt"); + doTest(fileName); + } + @TestMetadata("Render.kt") public void testRender() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/structureView/fileStructure/Render.kt");