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