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
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;
@@ -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());
}
}
@@ -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
@@ -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))
}
}