Convert to Kotlin: HierarchyUtils (prettify)
This commit is contained in:
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.hierarchy
|
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.CommonDataKeys
|
||||||
import com.intellij.openapi.actionSystem.DataContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
@@ -24,40 +24,30 @@ import com.intellij.psi.PsiClass
|
|||||||
import com.intellij.psi.PsiDocumentManager
|
import com.intellij.psi.PsiDocumentManager
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.util.ArrayUtil
|
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||||
|
|
||||||
object HierarchyUtils {
|
fun isCallHierarchyElement(e: PsiElement): Boolean {
|
||||||
val IS_CALL_HIERARCHY_ELEMENT: Function1<PsiElement, Boolean> = fun(input: PsiElement?): Boolean {
|
return e is PsiMethod ||
|
||||||
return input is PsiMethod ||
|
e is PsiClass ||
|
||||||
input is PsiClass ||
|
e is KtFile ||
|
||||||
input is KtFile ||
|
e is KtNamedFunction ||
|
||||||
input is KtNamedFunction ||
|
e is KtSecondaryConstructor ||
|
||||||
input is KtSecondaryConstructor ||
|
e is KtObjectDeclaration ||
|
||||||
input is KtObjectDeclaration ||
|
e is KtClass && !e.isInterface() ||
|
||||||
input is KtClass && !input.isInterface() ||
|
e is KtProperty
|
||||||
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<PsiElement>(strict = false,
|
|
||||||
parentClasses = *(ArrayUtil.EMPTY_CLASS_ARRAY as Array<Class<PsiElement>>),
|
|
||||||
predicate = IS_CALL_HIERARCHY_ELEMENT)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
@@ -30,7 +30,7 @@ import com.intellij.psi.PsiClass;
|
|||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.ui.PopupHandler;
|
import com.intellij.ui.PopupHandler;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils;
|
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtilsKt;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -76,7 +76,7 @@ public class KotlinCallHierarchyBrowser extends CallHierarchyBrowserBase {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean isApplicableElement(@NotNull PsiElement element) {
|
protected boolean isApplicableElement(@NotNull PsiElement element) {
|
||||||
if (element instanceof PsiClass) return false; // PsiClass is not allowed at the hierarchy root
|
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
|
@Override
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import com.intellij.psi.PsiElement;
|
|||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
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.idea.util.ProjectRootsUtil;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ public class KotlinCallHierarchyProvider implements HierarchyProvider {
|
|||||||
PsiElement element = getCurrentElement(dataContext, project);
|
PsiElement element = getCurrentElement(dataContext, project);
|
||||||
if (element == null) return null;
|
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;
|
if (element instanceof KtFile || element == null || element.getLanguage() != KotlinLanguage.INSTANCE) return null;
|
||||||
|
|
||||||
return element;
|
return element;
|
||||||
|
|||||||
+3
-3
@@ -37,7 +37,7 @@ import gnu.trove.TObjectHashingStrategy;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil;
|
import org.jetbrains.kotlin.asJava.LightClassUtil;
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils;
|
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.KtReference;
|
||||||
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
import org.jetbrains.kotlin.idea.references.ReferenceUtilKt;
|
||||||
import org.jetbrains.kotlin.idea.search.usagesSearch.UtilsKt;
|
import org.jetbrains.kotlin.idea.search.usagesSearch.UtilsKt;
|
||||||
@@ -234,7 +234,7 @@ public class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStructure {
|
|||||||
PsiElement refElement = ref.getElement();
|
PsiElement refElement = ref.getElement();
|
||||||
if (PsiTreeUtil.getParentOfType(refElement, KtImportDirective.class, true) != null) return true;
|
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;
|
if (kotlinOnly && !(element instanceof KtNamedDeclaration)) return true;
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ public class KotlinCallerMethodsTreeStructure extends KotlinCallTreeStructure {
|
|||||||
if (element instanceof KtProperty) {
|
if (element instanceof KtProperty) {
|
||||||
KtProperty property = (KtProperty) element;
|
KtProperty property = (KtProperty) element;
|
||||||
if (PsiTreeUtil.isAncestor(property.getInitializer(), refElement, false)) {
|
if (PsiTreeUtil.isAncestor(property.getInitializer(), refElement, false)) {
|
||||||
element = HierarchyUtils.INSTANCE.getCallHierarchyElement(element.getParent());
|
element = HierarchyUtilsKt.getCallHierarchyElement(element.getParent());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-10
@@ -16,21 +16,19 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.hierarchy.overrides
|
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.ide.hierarchy.HierarchyTreeStructure
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase
|
||||||
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils
|
|
||||||
import org.jetbrains.kotlin.idea.KotlinBundle
|
|
||||||
import com.intellij.ide.hierarchy.method.MethodHierarchyBrowser
|
import com.intellij.ide.hierarchy.method.MethodHierarchyBrowser
|
||||||
import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiMethod
|
|
||||||
import com.intellij.psi.ElementDescriptionUtil
|
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 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.asJava.unwrapped
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinBundle
|
||||||
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
|
import javax.swing.JPanel
|
||||||
|
|
||||||
class KotlinOverrideHierarchyBrowser(
|
class KotlinOverrideHierarchyBrowser(
|
||||||
project: Project, baseElement: PsiElement
|
project: Project, baseElement: PsiElement
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys
|
|||||||
import com.intellij.openapi.actionSystem.DataContext
|
import com.intellij.openapi.actionSystem.DataContext
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiMethod
|
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.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
||||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
|||||||
class KotlinOverrideHierarchyProvider: HierarchyProvider {
|
class KotlinOverrideHierarchyProvider: HierarchyProvider {
|
||||||
override fun getTarget(dataContext: DataContext): PsiElement? {
|
override fun getTarget(dataContext: DataContext): PsiElement? {
|
||||||
return CommonDataKeys.PROJECT.getData(dataContext)?.let { project ->
|
return CommonDataKeys.PROJECT.getData(dataContext)?.let { project ->
|
||||||
getOverrideHierarchyElement(HierarchyUtils.getCurrentElement(dataContext, project))
|
getOverrideHierarchyElement(getCurrentElement(dataContext, project))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user