mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[kotlin] test data for type hierarchy starting in the library
^KTIJ-25790 fixed GitOrigin-RevId: b87588284321845bf183896a817c5692f891419b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
93043dd22f
commit
410cd8400a
@@ -2,12 +2,7 @@
|
||||
package org.jetbrains.kotlin.idea.k2.hierarchy
|
||||
|
||||
import com.intellij.codeInsight.TargetElementUtil
|
||||
import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
|
||||
import com.intellij.ide.hierarchy.HierarchyProvider
|
||||
import com.intellij.ide.hierarchy.HierarchyTreeStructure
|
||||
import com.intellij.ide.hierarchy.LanguageCallHierarchy
|
||||
import com.intellij.ide.hierarchy.LanguageMethodHierarchy
|
||||
import com.intellij.ide.hierarchy.LanguageTypeHierarchy
|
||||
import com.intellij.ide.hierarchy.*
|
||||
import com.intellij.ide.hierarchy.actions.BrowseHierarchyActionBase
|
||||
import com.intellij.ide.hierarchy.call.CallerMethodsTreeStructure
|
||||
import com.intellij.ide.hierarchy.type.TypeHierarchyTreeStructure
|
||||
|
||||
@@ -5,12 +5,17 @@ import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
|
||||
import com.intellij.ide.hierarchy.type.TypeHierarchyTreeStructure
|
||||
import com.intellij.openapi.util.Computable
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.base.psi.kotlinFqName
|
||||
import org.jetbrains.kotlin.idea.base.test.InTextDirectivesUtils
|
||||
import org.jetbrains.kotlin.idea.base.test.KotlinRoot
|
||||
import org.jetbrains.kotlin.idea.k2.codeinsight.hierarchy.types.KotlinTypeHierarchyTreeStructure
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||
import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
abstract class AbstractFirHierarchyWithLibTest : AbstractFirHierarchyTest() {
|
||||
protected fun doTest(folderName: String) {
|
||||
@@ -25,21 +30,26 @@ abstract class AbstractFirHierarchyWithLibTest : AbstractFirHierarchyTest() {
|
||||
|
||||
doHierarchyTest(
|
||||
Computable {
|
||||
val targetClass = findTargetJavaClass(directive.trim())
|
||||
val targetClass = findTargetLibraryClass(directive.trim())
|
||||
|
||||
TypeHierarchyTreeStructure(
|
||||
project,
|
||||
targetClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
when (targetClass) {
|
||||
is PsiClass ->
|
||||
TypeHierarchyTreeStructure(
|
||||
project,
|
||||
targetClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
is KtClassOrObject ->
|
||||
KotlinTypeHierarchyTreeStructure(
|
||||
project,
|
||||
targetClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
else -> error("Could not find java class or kotlin class: $directive")
|
||||
}
|
||||
}, *filesToConfigure
|
||||
)
|
||||
}
|
||||
|
||||
private fun findTargetJavaClass(targetClass: String): PsiClass {
|
||||
return JavaFullClassNameIndex.getInstance().getClasses(targetClass, project, GlobalSearchScope.allScope(project))
|
||||
.find { it.qualifiedName == targetClass } ?: error("Could not find java class: $targetClass")
|
||||
}
|
||||
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = ProjectDescriptorWithStdlibSources.getInstanceWithStdlibSources()
|
||||
}
|
||||
@@ -30,6 +30,11 @@ public class FirHierarchyWithLibTestGenerated extends AbstractFirHierarchyWithLi
|
||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||
}
|
||||
|
||||
@TestMetadata("abstractList")
|
||||
public void testAbstractList() throws Exception {
|
||||
runTest("../../idea/tests/testData/hierarchy/withLib/abstractList/");
|
||||
}
|
||||
|
||||
@TestMetadata("annotation")
|
||||
public void testAnnotation() throws Exception {
|
||||
runTest("../../idea/tests/testData/hierarchy/withLib/annotation/");
|
||||
|
||||
@@ -7,12 +7,18 @@ import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.util.Computable
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.testFramework.codeInsight.hierarchy.HierarchyViewTestFixture
|
||||
import org.jetbrains.kotlin.idea.base.psi.kotlinFqName
|
||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.junit.internal.runners.JUnit38ClassRunner
|
||||
import org.junit.runner.RunWith
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import kotlin.collections.find
|
||||
|
||||
@RunWith(JUnit38ClassRunner::class)
|
||||
abstract class KotlinHierarchyViewTestBase : KotlinLightCodeInsightFixtureTestCase() {
|
||||
@@ -32,6 +38,13 @@ abstract class KotlinHierarchyViewTestBase : KotlinLightCodeInsightFixtureTestCa
|
||||
}
|
||||
}
|
||||
|
||||
protected fun findTargetLibraryClass(targetClass: String): PsiElement {
|
||||
return JavaFullClassNameIndex.getInstance().getClasses(targetClass, project, GlobalSearchScope.allScope(project))
|
||||
.find { it.qualifiedName == targetClass }
|
||||
?: KotlinFullClassNameIndex.Helper.get(targetClass, project, GlobalSearchScope.allScope(project)).find { it.kotlinFqName?.asString() == targetClass }
|
||||
?: error("Could not find java class: $targetClass")
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
protected open fun loadExpectedStructure(): String {
|
||||
val verificationFile = File(testDataDirectory, getTestName(false) + "_verification.xml")
|
||||
|
||||
@@ -6,12 +6,12 @@ import com.intellij.ide.hierarchy.HierarchyBrowserBaseEx
|
||||
import com.intellij.ide.hierarchy.type.TypeHierarchyTreeStructure
|
||||
import com.intellij.openapi.util.Computable
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.idea.base.test.InTextDirectivesUtils
|
||||
import org.jetbrains.kotlin.idea.base.test.KotlinRoot
|
||||
import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
abstract class AbstractHierarchyWithLibTest : AbstractHierarchyTest() {
|
||||
protected fun doTest(folderName: String) {
|
||||
@@ -26,21 +26,27 @@ abstract class AbstractHierarchyWithLibTest : AbstractHierarchyTest() {
|
||||
|
||||
doHierarchyTest(
|
||||
Computable {
|
||||
val targetClass = findTargetJavaClass(directive.trim())
|
||||
val targetClass = findTargetLibraryClass(directive.trim())
|
||||
|
||||
TypeHierarchyTreeStructure(
|
||||
project,
|
||||
targetClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
when (targetClass) {
|
||||
is PsiClass -> TypeHierarchyTreeStructure(
|
||||
project,
|
||||
targetClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
is KtClassOrObject -> {
|
||||
val lightClass = targetClass.toLightClass() ?: error("Can't get light class for $targetClass")
|
||||
TypeHierarchyTreeStructure(
|
||||
project,
|
||||
lightClass,
|
||||
HierarchyBrowserBaseEx.SCOPE_PROJECT
|
||||
)
|
||||
}
|
||||
else -> error("Could not find java class or kotlin class: $directive")
|
||||
}
|
||||
}, *filesToConfigure
|
||||
)
|
||||
}
|
||||
|
||||
private fun findTargetJavaClass(targetClass: String): PsiClass {
|
||||
return JavaFullClassNameIndex.getInstance().getClasses(targetClass, project, GlobalSearchScope.allScope(project))
|
||||
.find { it.qualifiedName == targetClass } ?: error("Could not find java class: $targetClass")
|
||||
}
|
||||
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = ProjectDescriptorWithStdlibSources.getInstanceWithStdlibSources()
|
||||
}
|
||||
@@ -30,6 +30,11 @@ public class HierarchyWithLibTestGenerated extends AbstractHierarchyWithLibTest
|
||||
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
|
||||
}
|
||||
|
||||
@TestMetadata("abstractList")
|
||||
public void testAbstractList() throws Exception {
|
||||
runTest("testData/hierarchy/withLib/abstractList/");
|
||||
}
|
||||
|
||||
@TestMetadata("annotation")
|
||||
public void testAnnotation() throws Exception {
|
||||
runTest("testData/hierarchy/withLib/annotation/");
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<node text="AbstractCollection (kotlin.collections)">
|
||||
<node text="AbstractList (kotlin.collections)" base="true">
|
||||
<node text="L ()"/>
|
||||
</node>
|
||||
</node>
|
||||
@@ -0,0 +1,7 @@
|
||||
<node text="Object (java.lang)">
|
||||
<node text="AbstractCollection (kotlin.collections)">
|
||||
<node text="AbstractList (kotlin.collections)" base="true">
|
||||
<node text="L ()"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
@@ -0,0 +1,4 @@
|
||||
// BASE_CLASS: kotlin.collections.AbstractList
|
||||
// WITH_STDLIB
|
||||
|
||||
abstract class L<T>: AbstractList<T>()
|
||||
Reference in New Issue
Block a user