package com.jetbrains.dart.analysisServer; import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.codeInsight.hierarchy.HierarchyViewTestBase; import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService; import com.jetbrains.lang.dart.ide.hierarchy.type.DartServerSupertypesHierarchyTreeStructure; import com.jetbrains.lang.dart.ide.hierarchy.type.DartServerTypeHierarchyTreeStructure; import com.jetbrains.lang.dart.ide.index.DartClassIndex; import com.jetbrains.lang.dart.psi.DartClass; import com.jetbrains.lang.dart.psi.DartComponentName; import com.jetbrains.lang.dart.util.DartTestUtils; import java.util.List; public class DartTypeHierarchyTest extends HierarchyViewTestBase { @Override public void setUp() throws Exception { super.setUp(); DartTestUtils.configureDartSdk(myModule, getTestRootDisposable(), true); DartAnalysisServerService.getInstance(getProject()).serverReadyForRequest(getProject()); } @Override protected String getBasePath() { return "analysisServer/typeHierarchy/" + getTestName(false); } @Override protected String getTestDataPath() { return DartTestUtils.BASE_TEST_DATA_PATH; } private void doDartTypeHierarchyTest(final String className, final boolean subtype, final String... fileNames) throws Exception { doHierarchyTest(() -> { final Project project = getProject(); final List<DartComponentName> dartComponentNames = DartClassIndex.getItemsByName(className, project, GlobalSearchScope.projectScope(project)); for (DartComponentName name : dartComponentNames) { DartClass dartClass = PsiTreeUtil.getParentOfType(name, DartClass.class); if (dartClass != null && dartClass.getName().equals(className)) { if (subtype) { return new DartServerTypeHierarchyTreeStructure(project, dartClass, HierarchyBrowserBaseEx.SCOPE_PROJECT); } else { return new DartServerSupertypesHierarchyTreeStructure(project, dartClass); } } } return null; }, fileNames); } public void testPartOfExtends() throws Exception { doDartTypeHierarchyTest("B", true, getTestName(false) + ".dart", "SomePart.dart"); } public void testSubtypeExtends() throws Exception { doDartTypeHierarchyTest("B", true, getTestName(false) + ".dart"); } public void testSubtypeImplements() throws Exception { doDartTypeHierarchyTest("B", true, getTestName(false) + ".dart"); } public void testSubtypeMixins() throws Exception { doDartTypeHierarchyTest("B", true, getTestName(false) + ".dart"); } public void testSupertypeExtends() throws Exception { doDartTypeHierarchyTest("D", false, getTestName(false) + ".dart"); } public void testSupertypeImplements() throws Exception { doDartTypeHierarchyTest("E", false, getTestName(false) + ".dart"); } public void testSupertypeMixins() throws Exception { doDartTypeHierarchyTest("B", false, getTestName(false) + ".dart"); } public void testRedSuperClass() throws Exception { doDartTypeHierarchyTest("B", true, getTestName(false) + ".dart"); } }