From cd1943c8b071e8bdc1fb04dd9939f226114b85aa Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 18 Aug 2016 21:06:37 +0300 Subject: [PATCH] Convert to Kotlin: HierarchyUtils (prettify) --- .../kotlin/idea/hierarchy/HierarchyUtils.kt | 58 ++++++++----------- .../calls/KotlinCallHierarchyBrowser.java | 4 +- .../calls/KotlinCallHierarchyProvider.java | 4 +- .../KotlinCallerMethodsTreeStructure.java | 6 +- .../KotlinOverrideHierarchyBrowser.kt | 18 +++--- .../KotlinOverrideHierarchyProvider.kt | 4 +- 6 files changed, 41 insertions(+), 53 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt index d1c94f3ac72..238d1522044 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.idea.hierarchy -import com.intellij.codeInsight.TargetElementUtilBase +import com.intellij.codeInsight.TargetElementUtil import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.project.Project @@ -24,40 +24,30 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod -import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate +import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf -object HierarchyUtils { - val IS_CALL_HIERARCHY_ELEMENT: Function1 = fun(input: PsiElement?): Boolean { - return input is PsiMethod || - input is PsiClass || - input is KtFile || - input is KtNamedFunction || - input is KtSecondaryConstructor || - input is KtObjectDeclaration || - input is KtClass && !input.isInterface() || - input is KtProperty - } - - fun getCurrentElement(dataContext: DataContext, project: Project): PsiElement? { - val editor = CommonDataKeys.EDITOR.getData(dataContext) - if (editor != null) { - val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return null - - if (!ProjectRootsUtil.isInProjectOrLibSource(file)) return null - - return TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().allAccepted) - } - - return CommonDataKeys.PSI_ELEMENT.getData(dataContext) - } - - fun getCallHierarchyElement(element: PsiElement): PsiElement? { - //noinspection unchecked - return element.getParentOfTypesAndPredicate(strict = false, - parentClasses = *(ArrayUtil.EMPTY_CLASS_ARRAY as Array>), - predicate = IS_CALL_HIERARCHY_ELEMENT) - } +fun isCallHierarchyElement(e: PsiElement): Boolean { + return e is PsiMethod || + e is PsiClass || + e is KtFile || + e is KtNamedFunction || + e is KtSecondaryConstructor || + e is KtObjectDeclaration || + e is KtClass && !e.isInterface() || + e is KtProperty } + +fun getCurrentElement(dataContext: DataContext, project: Project): PsiElement? { + val editor = CommonDataKeys.EDITOR.getData(dataContext) + if (editor != null) { + val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return null + if (!ProjectRootsUtil.isInProjectOrLibSource(file)) return null + return TargetElementUtil.findTargetElement(editor, TargetElementUtil.getInstance().allAccepted) + } + + return CommonDataKeys.PSI_ELEMENT.getData(dataContext) +} + +fun getCallHierarchyElement(element: PsiElement) = element.parentsWithSelf.firstOrNull(::isCallHierarchyElement) \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java index 9c8374c04ae..e50abed5857 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java @@ -30,7 +30,7 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.ui.PopupHandler; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils; +import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtilsKt; import javax.swing.*; import java.util.Comparator; @@ -76,7 +76,7 @@ public class KotlinCallHierarchyBrowser extends CallHierarchyBrowserBase { @Override protected boolean isApplicableElement(@NotNull PsiElement element) { if (element instanceof PsiClass) return false; // PsiClass is not allowed at the hierarchy root - return HierarchyUtils.INSTANCE.getIS_CALL_HIERARCHY_ELEMENT().invoke(element); + return HierarchyUtilsKt.isCallHierarchyElement(element); } @Override diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java index f702ae497fa..dcebcaa366a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java @@ -29,7 +29,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.KotlinLanguage; -import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils; +import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtilsKt; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.psi.KtFile; @@ -42,7 +42,7 @@ public class KotlinCallHierarchyProvider implements HierarchyProvider { PsiElement element = getCurrentElement(dataContext, project); if (element == null) return null; - element = HierarchyUtils.INSTANCE.getCallHierarchyElement(element); + element = HierarchyUtilsKt.getCallHierarchyElement(element); if (element instanceof KtFile || element == null || element.getLanguage() != KotlinLanguage.INSTANCE) return null; return element; diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java index 269b8269c6e..fe3f87e1dc3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java @@ -37,7 +37,7 @@ import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.asJava.LightClassUtil; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; -import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils; +import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtilsKt; import org.jetbrains.kotlin.idea.references.KtReference; import org.jetbrains.kotlin.idea.references.ReferenceUtilKt; import org.jetbrains.kotlin.idea.search.usagesSearch.UtilsKt; @@ -234,7 +234,7 @@ public class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStructure { PsiElement refElement = ref.getElement(); if (PsiTreeUtil.getParentOfType(refElement, KtImportDirective.class, true) != null) return true; - PsiElement element = HierarchyUtils.INSTANCE.getCallHierarchyElement(refElement); + PsiElement element = HierarchyUtilsKt.getCallHierarchyElement(refElement); if (kotlinOnly && !(element instanceof KtNamedDeclaration)) return true; @@ -242,7 +242,7 @@ public class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStructure { if (element instanceof KtProperty) { KtProperty property = (KtProperty) element; if (PsiTreeUtil.isAncestor(property.getInitializer(), refElement, false)) { - element = HierarchyUtils.INSTANCE.getCallHierarchyElement(element.getParent()); + element = HierarchyUtilsKt.getCallHierarchyElement(element.getParent()); } } diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyBrowser.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyBrowser.kt index 441f5587320..a78b52a4a06 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyBrowser.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyBrowser.kt @@ -16,21 +16,19 @@ package org.jetbrains.kotlin.idea.hierarchy.overrides -import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase -import com.intellij.psi.PsiElement -import javax.swing.JPanel import com.intellij.ide.hierarchy.HierarchyTreeStructure -import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils -import org.jetbrains.kotlin.idea.KotlinBundle +import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase import com.intellij.ide.hierarchy.method.MethodHierarchyBrowser -import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod -import com.intellij.psi.PsiMethod +import com.intellij.openapi.project.Project import com.intellij.psi.ElementDescriptionUtil -import com.intellij.refactoring.util.RefactoringDescriptionLocation +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod import com.intellij.usageView.UsageViewLongNameLocation -import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod import org.jetbrains.kotlin.asJava.unwrapped +import org.jetbrains.kotlin.idea.KotlinBundle +import org.jetbrains.kotlin.psi.KtDeclaration +import javax.swing.JPanel class KotlinOverrideHierarchyBrowser( project: Project, baseElement: PsiElement diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyProvider.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyProvider.kt index ff535f4138d..30384d48799 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/overrides/KotlinOverrideHierarchyProvider.kt @@ -24,7 +24,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod -import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils +import org.jetbrains.kotlin.idea.hierarchy.getCurrentElement import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate class KotlinOverrideHierarchyProvider: HierarchyProvider { override fun getTarget(dataContext: DataContext): PsiElement? { return CommonDataKeys.PROJECT.getData(dataContext)?.let { project -> - getOverrideHierarchyElement(HierarchyUtils.getCurrentElement(dataContext, project)) + getOverrideHierarchyElement(getCurrentElement(dataContext, project)) } }