Convert to Kotlin: HierarchyUtils (prettify)
This commit is contained in:
@@ -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<PsiElement, Boolean> = 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<PsiElement>(strict = false,
|
||||
parentClasses = *(ArrayUtil.EMPTY_CLASS_ARRAY as Array<Class<PsiElement>>),
|
||||
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)
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
+3
-3
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-10
@@ -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
|
||||
|
||||
+2
-2
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user