From 6aa49d948832d2245ac4e882285bcbaf73945821 Mon Sep 17 00:00:00 2001 From: "Pouria.Derakhshanfar" Date: Tue, 15 Oct 2024 16:25:04 +0200 Subject: [PATCH 1/3] Enhance subclass fetching for ultra light classes --- .../testspark/kotlin/KotlinPsiClassWrapper.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt index 844230b88..ffaced7a4 100644 --- a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt +++ b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt @@ -6,9 +6,11 @@ import com.intellij.psi.PsiFile import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.searches.ClassInheritorsSearch import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.base.psi.kotlinFqName import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.K2CreateFunctionFromUsageUtil.toKtClassOrFile import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass @@ -91,7 +93,14 @@ class KotlinPsiClassWrapper(private val psiClass: KtClassOrObject) : PsiClassWra val lightClass = psiClass.toLightClass() return if (lightClass != null) { val query = ClassInheritorsSearch.search(lightClass, scope, false) - query.findAll().filter { it.kotlinFqName != null }.map { KotlinPsiClassWrapper(it as KtClass) } + query.findAll().filter { it.kotlinFqName != null }.map { + // If the sub-class is fetched as an ultra light class, get the KtClass + if (it is KtUltraLightClass) { + KotlinPsiClassWrapper(it.toKtClassOrFile() as KtClass) + } else { + KotlinPsiClassWrapper(it as KtClass) + } + } } else { emptyList() } From 4628e74992f1556d75aade105316a7f3cdefa43d Mon Sep 17 00:00:00 2001 From: "Pouria.Derakhshanfar" Date: Tue, 15 Oct 2024 16:48:20 +0200 Subject: [PATCH 2/3] Use a non-experimental API --- .../research/testspark/kotlin/KotlinPsiClassWrapper.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt index ffaced7a4..0d8b7cce7 100644 --- a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt +++ b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.idea.base.psi.kotlinFqName import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.K2CreateFunctionFromUsageUtil.toKtClassOrFile import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass +import org.jetbrains.kotlin.idea.testIntegration.framework.KotlinPsiBasedTestFramework.Companion.asKtClassOrObject import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject @@ -96,7 +97,7 @@ class KotlinPsiClassWrapper(private val psiClass: KtClassOrObject) : PsiClassWra query.findAll().filter { it.kotlinFqName != null }.map { // If the sub-class is fetched as an ultra light class, get the KtClass if (it is KtUltraLightClass) { - KotlinPsiClassWrapper(it.toKtClassOrFile() as KtClass) + KotlinPsiClassWrapper(it.asKtClassOrObject() as KtClass) } else { KotlinPsiClassWrapper(it as KtClass) } From 7a06c3125e2fbcfa78f7fea57650f45c82b02cc2 Mon Sep 17 00:00:00 2001 From: "Pouria.Derakhshanfar" Date: Tue, 15 Oct 2024 16:49:26 +0200 Subject: [PATCH 3/3] Remove unused import --- .../jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt index 0d8b7cce7..578c22729 100644 --- a/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt +++ b/kotlin/src/main/kotlin/org/jetbrains/research/testspark/kotlin/KotlinPsiClassWrapper.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.base.psi.kotlinFqName import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.K2CreateFunctionFromUsageUtil.toKtClassOrFile import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass import org.jetbrains.kotlin.idea.testIntegration.framework.KotlinPsiBasedTestFramework.Companion.asKtClassOrObject import org.jetbrains.kotlin.lexer.KtTokens