From b742c8a63df2c4493e69aa37ae7b00c23a3d375f Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 18 Nov 2016 12:41:29 +0100 Subject: [PATCH] Implement "Show non-public" filter for Kotlin structure view #KT-14217 Fixed --- .../KotlinStructureViewElement.kt | 5 +++++ .../structureView/KotlinStructureViewModel.kt | 22 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) 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 3ea0aa9eeff..3fb5dd2662d 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 @@ -25,6 +25,8 @@ import com.intellij.psi.NavigatablePsiElement import com.intellij.psi.PsiElement import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.* @@ -109,6 +111,9 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement, return result } + + val isPublic: Boolean + get() = (descriptor as? DeclarationDescriptorWithVisibility)?.visibility == Visibilities.PUBLIC } fun KtClassOrObject.getStructureDeclarations() = getPrimaryConstructorParameters().filter { it.hasValOrVar() } + declarations diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewModel.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewModel.kt index 2669fbdf034..e9fd6cfe35a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewModel.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewModel.kt @@ -17,7 +17,8 @@ package org.jetbrains.kotlin.idea.structureView import com.intellij.ide.structureView.StructureViewModelBase -import com.intellij.ide.util.treeView.smartTree.Sorter +import com.intellij.ide.util.treeView.smartTree.* +import com.intellij.util.PlatformIcons import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile @@ -30,7 +31,26 @@ class KotlinStructureViewModel(ktFile: KtFile) : StructureViewModelBase(ktFile, override fun getNodeProviders() = NODE_PROVIDERS + override fun getFilters() = FILTERS + companion object { private val NODE_PROVIDERS = listOf(KotlinInheritedMembersNodeProvider()) + private val FILTERS = arrayOf(PublicElementsFilter) } } + +object PublicElementsFilter : Filter { + override fun isVisible(treeNode: TreeElement): Boolean { + return (treeNode as? KotlinStructureViewElement)?.isPublic ?: true + } + + override fun getPresentation(): ActionPresentation { + return ActionPresentationData("Show non-public", null, PlatformIcons.PRIVATE_ICON) + } + + override fun getName() = ID + + override fun isReverted() = true + + const val ID = "KOTLIN_SHOW_NON_PUBLIC" +}