Call Hierarchy: Forbid interfaces

#EA-64406 Fixed
This commit is contained in:
Alexey Sedunov
2015-08-18 13:59:54 +03:00
parent 2432571a8c
commit 06cca689fc
7 changed files with 31 additions and 2 deletions
@@ -38,7 +38,8 @@ public class HierarchyUtils {
input instanceof JetFile || input instanceof JetFile ||
input instanceof JetNamedFunction || input instanceof JetNamedFunction ||
input instanceof JetSecondaryConstructor || input instanceof JetSecondaryConstructor ||
input instanceof JetClassOrObject || input instanceof JetObjectDeclaration ||
(input instanceof JetClass && !((JetClass) input).isInterface()) ||
input instanceof JetProperty; input instanceof JetProperty;
} }
}; };
@@ -30,6 +30,7 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils; import org.jetbrains.kotlin.idea.hierarchy.HierarchyUtils;
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
import org.jetbrains.kotlin.psi.JetFile;
public class KotlinCallHierarchyProvider implements HierarchyProvider { public class KotlinCallHierarchyProvider implements HierarchyProvider {
@Override @Override
@@ -40,7 +41,10 @@ public class KotlinCallHierarchyProvider implements HierarchyProvider {
PsiElement element = getCurrentElement(dataContext, project); PsiElement element = getCurrentElement(dataContext, project);
if (element == null) return null; if (element == null) return null;
return HierarchyUtils.getCallHierarchyElement(element); element = HierarchyUtils.getCallHierarchyElement(element);
if (element instanceof JetFile) return null;
return element;
} }
private static PsiElement getCurrentElement(DataContext dataContext, Project project) { private static PsiElement getCurrentElement(DataContext dataContext, Project project) {
@@ -0,0 +1,5 @@
interface <caret>T
class A : T {
val t: T? = null
}
@@ -0,0 +1 @@
Cannot apply action for element at caret
@@ -0,0 +1,5 @@
interface <caret>T
class A : T {
val t: T? = null
}
@@ -0,0 +1 @@
Cannot apply action for element at caret
@@ -316,6 +316,12 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doCallerHierarchyTest(fileName); doCallerHierarchyTest(fileName);
} }
@TestMetadata("kotlinInterface")
public void testKotlinInterface() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinInterface/");
doCallerHierarchyTest(fileName);
}
@TestMetadata("kotlinLocalClass") @TestMetadata("kotlinLocalClass")
public void testKotlinLocalClass() throws Exception { public void testKotlinLocalClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinLocalClass/"); String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callers/kotlinLocalClass/");
@@ -457,6 +463,12 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doCalleeHierarchyTest(fileName); doCalleeHierarchyTest(fileName);
} }
@TestMetadata("kotlinInterface")
public void testKotlinInterface() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callees/kotlinInterface/");
doCalleeHierarchyTest(fileName);
}
@TestMetadata("kotlinLocalClass") @TestMetadata("kotlinLocalClass")
public void testKotlinLocalClass() throws Exception { public void testKotlinLocalClass() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callees/kotlinLocalClass/"); String fileName = JetTestUtils.navigationMetadata("idea/testData/hierarchy/calls/callees/kotlinLocalClass/");