From f4ce63f6d75c25df3e5e38d6ffd523d0a3024bf6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 18 Nov 2016 12:11:55 +0100 Subject: [PATCH] Collect local declarations under properties (KT-14215); improve presentation of object declarations #KT-14215 Fixed --- .../KotlinStructureElementPresentation.kt | 5 +++++ .../structureView/KotlinStructureViewElement.kt | 2 +- .../fileStructure/AnonymousObjectMembers.after | 10 ++++++++++ .../fileStructure/AnonymousObjectMembers.kt | 15 +++++++++++++++ .../structureView/fileStructure/Render.after | 3 ++- .../KotlinFileStructureTestGenerated.java | 6 ++++++ 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 idea/testData/structureView/fileStructure/AnonymousObjectMembers.after create mode 100644 idea/testData/structureView/fileStructure/AnonymousObjectMembers.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureElementPresentation.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureElementPresentation.kt index 2b9e4600597..357cea05705 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureElementPresentation.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureElementPresentation.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.KotlinDescriptorIconProvider import org.jetbrains.kotlin.psi.KtAnonymousInitializer import org.jetbrains.kotlin.psi.KtModifierListOwner +import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.KtPsiUtil import org.jetbrains.kotlin.renderer.DescriptorRenderer.Companion.ONLY_NAMES_WITH_SHORT_TYPES import org.jetbrains.kotlin.resolve.DescriptorUtils.getAllOverriddenDeclarations @@ -82,6 +83,10 @@ internal class KotlinStructureElementPresentation( } private fun getElementText(navigatablePsiElement: NavigatablePsiElement, descriptor: DeclarationDescriptor?): String? { + if (navigatablePsiElement is KtObjectDeclaration && navigatablePsiElement.isObjectLiteral()) { + return "object" + (navigatablePsiElement.getSuperTypeList()?.text?.let { " : $it" } ?: "") + } + if (descriptor != null) { return ONLY_NAMES_WITH_SHORT_TYPES.render(descriptor) } 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 7364eaaa299..3ea0aa9eeff 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 @@ -90,7 +90,7 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement, is KtFile -> element.declarations is KtClass -> element.getStructureDeclarations() is KtClassOrObject -> element.declarations - is KtFunction, is KtClassInitializer -> element.collectLocalDeclarations() + is KtFunction, is KtClassInitializer, is KtProperty -> element.collectLocalDeclarations() else -> emptyList() } diff --git a/idea/testData/structureView/fileStructure/AnonymousObjectMembers.after b/idea/testData/structureView/fileStructure/AnonymousObjectMembers.after new file mode 100644 index 00000000000..f1b2fd755c3 --- /dev/null +++ b/idea/testData/structureView/fileStructure/AnonymousObjectMembers.after @@ -0,0 +1,10 @@ +-AnonymousObjectMembers.kt + -C + -bar(): Unit + -object : Runnable + run(): Unit + xyzzy(): Unit + -f: Runnable + -object : Runnable + run(): Unit + xyzzy(): Unit diff --git a/idea/testData/structureView/fileStructure/AnonymousObjectMembers.kt b/idea/testData/structureView/fileStructure/AnonymousObjectMembers.kt new file mode 100644 index 00000000000..bf7ac65a876 --- /dev/null +++ b/idea/testData/structureView/fileStructure/AnonymousObjectMembers.kt @@ -0,0 +1,15 @@ +class C { + val f = object : Runnable { + fun run() { } + + fun xyzzy() { } + } + + fun bar() { + val g = object : Runnable { + fun run() { } + + fun xyzzy() { } + } + } +} \ No newline at end of file diff --git a/idea/testData/structureView/fileStructure/Render.after b/idea/testData/structureView/fileStructure/Render.after index f752cd9049a..a4bdee4d45f 100644 --- a/idea/testData/structureView/fileStructure/Render.after +++ b/idea/testData/structureView/fileStructure/Render.after @@ -19,7 +19,8 @@ a: Int a: Int a: String on Comparable - b: Any + -b: Any + object -Enum1 FIRST SECOND diff --git a/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java index 0b1e7e2a0ed..4112146f57e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/structureView/KotlinFileStructureTestGenerated.java @@ -36,6 +36,12 @@ public class KotlinFileStructureTestGenerated extends AbstractKotlinFileStructur KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/structureView/fileStructure"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("AnonymousObjectMembers.kt") + public void testAnonymousObjectMembers() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/structureView/fileStructure/AnonymousObjectMembers.kt"); + doTest(fileName); + } + @TestMetadata("CheckLocationForKotlin.kt") public void testCheckLocationForKotlin() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/structureView/fileStructure/CheckLocationForKotlin.kt");