[kotlin] test data for type hierarchy starting in the library

^KTIJ-25790 fixed

GitOrigin-RevId: b87588284321845bf183896a817c5692f891419b
This commit is contained in:
Anna Kozlova
2024-11-25 21:39:57 +01:00
committed by intellij-monorepo-bot
parent 93043dd22f
commit 410cd8400a
9 changed files with 81 additions and 31 deletions

View File

@@ -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

View File

@@ -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()
}

View File

@@ -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/");

View File

@@ -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")

View File

@@ -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()
}

View File

@@ -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/");

View File

@@ -0,0 +1,5 @@
<node text="AbstractCollection (kotlin.collections)">
<node text="AbstractList (kotlin.collections)" base="true">
<node text="L ()"/>
</node>
</node>

View File

@@ -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>

View File

@@ -0,0 +1,4 @@
// BASE_CLASS: kotlin.collections.AbstractList
// WITH_STDLIB
abstract class L<T>: AbstractList<T>()