From 4622f08b5e8556c3985aa481afd5178aeb5b700a Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 18 Aug 2016 20:59:32 +0300 Subject: [PATCH] Convert to Kotlin: HierarchyUtils --- .../kotlin/idea/hierarchy/HierarchyUtils.kt | 71 +++++++++---------- .../calls/KotlinCallHierarchyBrowser.java | 2 +- .../calls/KotlinCallHierarchyProvider.java | 2 +- .../KotlinCallerMethodsTreeStructure.java | 4 +- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt index a4aeebf634e..d1c94f3ac72 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/HierarchyUtils.kt @@ -14,53 +14,50 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.hierarchy; +package org.jetbrains.kotlin.idea.hierarchy -import com.intellij.codeInsight.TargetElementUtilBase; -import com.intellij.openapi.actionSystem.CommonDataKeys; -import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.*; -import com.intellij.util.ArrayUtil; -import kotlin.jvm.functions.Function1; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; -import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt; +import com.intellij.codeInsight.TargetElementUtilBase +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.project.Project +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 -public class HierarchyUtils { - public static final Function1 IS_CALL_HIERARCHY_ELEMENT = new Function1() { - @Override - public Boolean invoke(@Nullable PsiElement input) { - return input instanceof PsiMethod || - input instanceof PsiClass || - input instanceof KtFile || - input instanceof KtNamedFunction || - input instanceof KtSecondaryConstructor || - input instanceof KtObjectDeclaration || - (input instanceof KtClass && !((KtClass) input).isInterface()) || - input instanceof KtProperty; - } - }; +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 + } - public static PsiElement getCurrentElement(DataContext dataContext, Project project) { - Editor editor = CommonDataKeys.EDITOR.getData(dataContext); + fun getCurrentElement(dataContext: DataContext, project: Project): PsiElement? { + val editor = CommonDataKeys.EDITOR.getData(dataContext) if (editor != null) { - PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); - if (file == null) return null; + val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) ?: return null - if (!ProjectRootsUtil.isInProjectOrLibSource(file)) return null; + if (!ProjectRootsUtil.isInProjectOrLibSource(file)) return null - return TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().getAllAccepted()); + return TargetElementUtilBase.findTargetElement(editor, TargetElementUtilBase.getInstance().allAccepted) } - return CommonDataKeys.PSI_ELEMENT.getData(dataContext); + return CommonDataKeys.PSI_ELEMENT.getData(dataContext) } - public static PsiElement getCallHierarchyElement(PsiElement element) { + fun getCallHierarchyElement(element: PsiElement): PsiElement? { //noinspection unchecked - return PsiUtilsKt.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_CALL_HIERARCHY_ELEMENT); + return element.getParentOfTypesAndPredicate(strict = false, + parentClasses = *(ArrayUtil.EMPTY_CLASS_ARRAY as Array>), + predicate = IS_CALL_HIERARCHY_ELEMENT) } - } 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 2f9347c92a2..9c8374c04ae 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyBrowser.java @@ -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.IS_CALL_HIERARCHY_ELEMENT.invoke(element); + return HierarchyUtils.INSTANCE.getIS_CALL_HIERARCHY_ELEMENT().invoke(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 802285fbb43..f702ae497fa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallHierarchyProvider.java @@ -42,7 +42,7 @@ public class KotlinCallHierarchyProvider implements HierarchyProvider { PsiElement element = getCurrentElement(dataContext, project); if (element == null) return null; - element = HierarchyUtils.getCallHierarchyElement(element); + element = HierarchyUtils.INSTANCE.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 09fe53af2bc..269b8269c6e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/calls/KotlinCallerMethodsTreeStructure.java @@ -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.getCallHierarchyElement(refElement); + PsiElement element = HierarchyUtils.INSTANCE.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.getCallHierarchyElement(element.getParent()); + element = HierarchyUtils.INSTANCE.getCallHierarchyElement(element.getParent()); } }