show two levels of hierarchy when grouping find usages by file structure
#KT-9019 Fixed #KT-10178 Fixed
This commit is contained in:
@@ -339,6 +339,7 @@
|
|||||||
<lang.elementManipulator forClass="org.jetbrains.kotlin.psi.KtStringTemplateExpression"
|
<lang.elementManipulator forClass="org.jetbrains.kotlin.psi.KtStringTemplateExpression"
|
||||||
implementationClass="org.jetbrains.kotlin.psi.psiUtil.KtStringTemplateExpressionManipulator"/>
|
implementationClass="org.jetbrains.kotlin.psi.psiUtil.KtStringTemplateExpressionManipulator"/>
|
||||||
<fileStructureGroupRuleProvider implementation="org.jetbrains.kotlin.idea.findUsages.KotlinDeclarationGroupRuleProvider"/>
|
<fileStructureGroupRuleProvider implementation="org.jetbrains.kotlin.idea.findUsages.KotlinDeclarationGroupRuleProvider"/>
|
||||||
|
<fileStructureGroupRuleProvider implementation="org.jetbrains.kotlin.idea.findUsages.KotlinDeclarationSecondLevelGroupRuleProvider"/>
|
||||||
<importFilteringRule implementation="org.jetbrains.kotlin.idea.findUsages.KotlinImportFilteringRule"/>
|
<importFilteringRule implementation="org.jetbrains.kotlin.idea.findUsages.KotlinImportFilteringRule"/>
|
||||||
<lang.refactoringSupport language="kotlin" implementationClass="org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringSupportProvider"/>
|
<lang.refactoringSupport language="kotlin" implementationClass="org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringSupportProvider"/>
|
||||||
<lang.surroundDescriptor language="kotlin"
|
<lang.surroundDescriptor language="kotlin"
|
||||||
|
|||||||
+24
-21
@@ -16,33 +16,36 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.findUsages
|
package org.jetbrains.kotlin.idea.findUsages
|
||||||
|
|
||||||
import com.intellij.usages.rules.PsiElementUsage
|
|
||||||
import com.intellij.usages.UsageGroup
|
|
||||||
import com.intellij.usages.Usage
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
|
||||||
import com.intellij.usages.rules.UsageGroupingRule
|
|
||||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
|
||||||
import com.intellij.usages.PsiNamedElementUsageGroupBase
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
import com.intellij.usages.impl.FileStructureGroupRuleProvider
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.usages.PsiNamedElementUsageGroupBase
|
||||||
|
import com.intellij.usages.Usage
|
||||||
|
import com.intellij.usages.UsageGroup
|
||||||
|
import com.intellij.usages.impl.FileStructureGroupRuleProvider
|
||||||
|
import com.intellij.usages.rules.PsiElementUsage
|
||||||
|
import com.intellij.usages.rules.UsageGroupingRule
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.parents
|
||||||
|
|
||||||
class KotlinDeclarationGroupRuleProvider : FileStructureGroupRuleProvider {
|
class KotlinDeclarationGroupingRule(val level: Int) : UsageGroupingRule {
|
||||||
class KotlinDeclarationGroupingRule : UsageGroupingRule {
|
override fun groupUsage(usage: Usage): UsageGroup? {
|
||||||
override fun groupUsage(usage: Usage): UsageGroup? {
|
val element = (usage as? PsiElementUsage)?.element ?: return null
|
||||||
val element = (usage as? PsiElementUsage)?.element
|
|
||||||
if (element == null) return null
|
|
||||||
|
|
||||||
val containingFile = element.containingFile
|
val containingFile = element.containingFile
|
||||||
if (containingFile !is KtFile) return null
|
if (containingFile !is KtFile) return null
|
||||||
|
|
||||||
return PsiTreeUtil.getTopmostParentOfType(element, KtNamedDeclaration::class.java)?.let { container ->
|
val parentList = element.parents.filterIsInstance<KtNamedDeclaration>().toList()
|
||||||
PsiNamedElementUsageGroupBase(container)
|
if (parentList.size <= level) {
|
||||||
}
|
return null
|
||||||
}
|
}
|
||||||
|
return PsiNamedElementUsageGroupBase(parentList[parentList.size - level - 1])
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getUsageGroupingRule(project: Project): UsageGroupingRule = KotlinDeclarationGroupingRule()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class KotlinDeclarationGroupRuleProvider : FileStructureGroupRuleProvider {
|
||||||
|
override fun getUsageGroupingRule(project: Project): UsageGroupingRule = KotlinDeclarationGroupingRule(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
class KotlinDeclarationSecondLevelGroupRuleProvider : FileStructureGroupRuleProvider {
|
||||||
|
override fun getUsageGroupingRule(project: Project): UsageGroupingRule = KotlinDeclarationGroupingRule(1)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user