Convert to Kotlin: HierarchyUtils (prettify)

This commit is contained in:
Alexey Sedunov
2016-08-18 21:06:37 +03:00
parent 4622f08b5e
commit cd1943c8b0
6 changed files with 41 additions and 53 deletions
@@ -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;
@@ -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());
} }
} }
@@ -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
@@ -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))
} }
} }