override hierarchy: convert some more code to Kotlin, sort out nullability

#KT-7531 Fixed
This commit is contained in:
Dmitry Jemerov
2015-04-24 15:27:00 +02:00
parent b3aadfd5e0
commit d013221942
3 changed files with 16 additions and 19 deletions
@@ -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) {
Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
if (editor != null) {
@@ -71,8 +62,4 @@ public class HierarchyUtils {
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);
}
}
@@ -43,7 +43,7 @@ class KotlinOverrideHierarchyBrowser(
)
override fun isApplicableElement(psiElement: PsiElement): Boolean =
HierarchyUtils.IS_OVERRIDE_HIERARCHY_ELEMENT(psiElement)
isOverrideHierarchyElement(psiElement)
override fun createHierarchyTreeStructure(typeName: String, psiElement: PsiElement): HierarchyTreeStructure? =
if (typeName == MethodHierarchyBrowserBase.METHOD_TYPE) KotlinOverrideTreeStructure(myProject, psiElement) else null
@@ -16,19 +16,23 @@
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.MethodHierarchyBrowserBase
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.psi.PsiElement
import com.intellij.ide.hierarchy.HierarchyBrowser
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.psi.PsiMethod
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils
import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase
import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
import org.jetbrains.kotlin.psi.JetNamedFunction
import org.jetbrains.kotlin.psi.JetProperty
import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate
public class KotlinOverrideHierarchyProvider: HierarchyProvider {
override fun getTarget(dataContext: DataContext): PsiElement? {
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) {
(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