override hierarchy: convert some more code to Kotlin, sort out nullability
#KT-7531 Fixed
This commit is contained in:
@@ -43,15 +43,6 @@ public class HierarchyUtils {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final Function1<PsiElement, Boolean> IS_OVERRIDE_HIERARCHY_ELEMENT = new Function1<PsiElement, Boolean>() {
|
|
||||||
@Override
|
|
||||||
public Boolean invoke(@Nullable PsiElement input) {
|
|
||||||
return input instanceof PsiMethod ||
|
|
||||||
input instanceof JetNamedFunction ||
|
|
||||||
input instanceof JetProperty;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public static PsiElement getCurrentElement(DataContext dataContext, Project project) {
|
public static PsiElement getCurrentElement(DataContext dataContext, Project project) {
|
||||||
Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
|
Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
|
||||||
if (editor != null) {
|
if (editor != null) {
|
||||||
@@ -71,8 +62,4 @@ public class HierarchyUtils {
|
|||||||
return PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_CALL_HIERARCHY_ELEMENT);
|
return PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_CALL_HIERARCHY_ELEMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PsiElement getOverrideHierarchyElement(PsiElement element) {
|
|
||||||
//noinspection unchecked
|
|
||||||
return PsiUtilPackage.getParentOfTypesAndPredicate(element, false, ArrayUtil.EMPTY_CLASS_ARRAY, IS_OVERRIDE_HIERARCHY_ELEMENT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ class KotlinOverrideHierarchyBrowser(
|
|||||||
)
|
)
|
||||||
|
|
||||||
override fun isApplicableElement(psiElement: PsiElement): Boolean =
|
override fun isApplicableElement(psiElement: PsiElement): Boolean =
|
||||||
HierarchyUtils.IS_OVERRIDE_HIERARCHY_ELEMENT(psiElement)
|
isOverrideHierarchyElement(psiElement)
|
||||||
|
|
||||||
override fun createHierarchyTreeStructure(typeName: String, psiElement: PsiElement): HierarchyTreeStructure? =
|
override fun createHierarchyTreeStructure(typeName: String, psiElement: PsiElement): HierarchyTreeStructure? =
|
||||||
if (typeName == MethodHierarchyBrowserBase.METHOD_TYPE) KotlinOverrideTreeStructure(myProject, psiElement) else null
|
if (typeName == MethodHierarchyBrowserBase.METHOD_TYPE) KotlinOverrideTreeStructure(myProject, psiElement) else null
|
||||||
|
|||||||
+15
-5
@@ -16,19 +16,23 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.hierarchy.overrides
|
package org.jetbrains.kotlin.idea.hierarchy.overrides
|
||||||
|
|
||||||
|
import com.intellij.ide.hierarchy.HierarchyBrowser
|
||||||
|
import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
|
||||||
import com.intellij.ide.hierarchy.HierarchyProvider
|
import com.intellij.ide.hierarchy.HierarchyProvider
|
||||||
|
import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase
|
||||||
|
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.ide.hierarchy.HierarchyBrowser
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
|
||||||
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils
|
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils
|
||||||
import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase
|
import org.jetbrains.kotlin.psi.JetNamedFunction
|
||||||
import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
|
import org.jetbrains.kotlin.psi.JetProperty
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
|
||||||
|
|
||||||
public class KotlinOverrideHierarchyProvider: HierarchyProvider {
|
public 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 ->
|
||||||
HierarchyUtils.getOverrideHierarchyElement(HierarchyUtils.getCurrentElement(dataContext, project))
|
getOverrideHierarchyElement(HierarchyUtils.getCurrentElement(dataContext, project))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,4 +42,10 @@ public class KotlinOverrideHierarchyProvider: HierarchyProvider {
|
|||||||
override fun browserActivated(hierarchyBrowser: HierarchyBrowser) {
|
override fun browserActivated(hierarchyBrowser: HierarchyBrowser) {
|
||||||
(hierarchyBrowser as HierarchyBrowserBaseEx).changeView(MethodHierarchyBrowserBase.METHOD_TYPE)
|
(hierarchyBrowser as HierarchyBrowserBaseEx).changeView(MethodHierarchyBrowserBase.METHOD_TYPE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getOverrideHierarchyElement(element: PsiElement?): PsiElement?
|
||||||
|
= element?.getParentOfTypesAndPredicate() { isOverrideHierarchyElement(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isOverrideHierarchyElement(element: PsiElement): Boolean
|
||||||
|
= element is PsiMethod || element is JetNamedFunction || element is JetProperty
|
||||||
|
|||||||
Reference in New Issue
Block a user