diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 6546292e3ba..48efa62c57f 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -349,7 +349,8 @@ - + + diff --git a/idea/src/org/jetbrains/kotlin/idea/projectView/KotlinProjectViewProvider.kt b/idea/src/org/jetbrains/kotlin/idea/projectView/projectViewProviders.kt similarity index 75% rename from idea/src/org/jetbrains/kotlin/idea/projectView/KotlinProjectViewProvider.kt rename to idea/src/org/jetbrains/kotlin/idea/projectView/projectViewProviders.kt index 2bc5993d609..3a8980a77a0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/projectView/KotlinProjectViewProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/projectView/projectViewProviders.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.projectView import com.intellij.ide.projectView.SelectableTreeStructureProvider +import com.intellij.ide.projectView.TreeStructureProvider import com.intellij.ide.projectView.ViewSettings import com.intellij.ide.util.treeView.AbstractTreeNode import com.intellij.openapi.project.DumbAware @@ -33,11 +34,14 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import java.util.* -class KotlinProjectViewProvider(private val myProject: Project) : SelectableTreeStructureProvider, DumbAware { +class KotlinExpandNodeProjectViewProvider : TreeStructureProvider, DumbAware { - override fun modify(parent: AbstractTreeNode, - children: Collection>, - settings: ViewSettings): Collection> { + // should be called after ClassesTreeStructureProvider + override fun modify( + parent: AbstractTreeNode, + children: Collection>, + settings: ViewSettings + ): Collection> { val result = ArrayList>() for (child in children) { @@ -63,14 +67,29 @@ class KotlinProjectViewProvider(private val myProject: Project) : SelectableTree return result } - private fun Any.asKtFile(): KtFile? = when(this) { + private fun Any.asKtFile(): KtFile? = when (this) { is KtFile -> this is KtLightClass -> getOrigin()?.containingFile as? KtFile else -> null } override fun getData(selected: Collection>, dataName: String): Any? = null +} + +class KotlinSelectInProjectViewProvider(private val project: Project) : SelectableTreeStructureProvider, DumbAware { + override fun getData(selected: Collection>, dataName: String): Any? = null + + override fun modify( + parent: AbstractTreeNode, + children: Collection>, + settings: ViewSettings + ): Collection> { + return ArrayList(children) + } + + + // should be called before ClassesTreeStructureProvider override fun getTopLevelElement(element: PsiElement): PsiElement? { val file = element.containingFile as? KtFile ?: return null @@ -90,7 +109,7 @@ class KotlinProjectViewProvider(private val myProject: Project) : SelectableTree return current ?: file } - private fun PsiElement.isSelectable(): Boolean = when(this) { + private fun PsiElement.isSelectable(): Boolean = when (this) { is KtFile -> true is KtDeclaration -> parent is KtFile || @@ -99,7 +118,7 @@ class KotlinProjectViewProvider(private val myProject: Project) : SelectableTree } private fun fileInRoots(file: VirtualFile?): Boolean { - val index = ProjectRootManager.getInstance(myProject).fileIndex + val index = ProjectRootManager.getInstance(project).fileIndex return file != null && (index.isInSourceContent(file) || index.isInLibraryClasses(file) || index.isInLibrarySource(file)) } }