diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightAnonymousClassForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightAnonymousClassForSymbol.kt index 8e5117ecae6..ced56f3299f 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightAnonymousClassForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightAnonymousClassForSymbol.kt @@ -98,8 +98,6 @@ internal class FirLightAnonymousClassForSymbol( override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this) override fun getSupers(): Array = PsiClassImplUtil.getSupers(this) override fun getSuperTypes(): Array = PsiClassImplUtil.getSuperTypes(this) - override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean = - InheritanceImplUtil.isInheritor(this, baseClass, checkDeep) override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean = baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt index 3845a861902..50f1f67d362 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassBase.kt @@ -22,10 +22,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.util.Pair import com.intellij.openapi.util.TextRange import com.intellij.psi.* -import com.intellij.psi.impl.PsiCachedValueImpl -import com.intellij.psi.impl.PsiClassImplUtil -import com.intellij.psi.impl.PsiImplUtil -import com.intellij.psi.impl.PsiSuperMethodImplUtil +import com.intellij.psi.impl.* import com.intellij.psi.impl.light.LightElement import com.intellij.psi.impl.source.PsiExtensibleClass import com.intellij.psi.javadoc.PsiDocComment @@ -34,14 +31,12 @@ import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.PsiUtil import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker -import org.jetbrains.kotlin.asJava.classes.KotlinClassInnerStuffCache import org.jetbrains.kotlin.asJava.classes.KotlinClassInnerStuffCache.Companion.processDeclarationsInEnum -import org.jetbrains.kotlin.asJava.classes.KtLightClass -import org.jetbrains.kotlin.asJava.classes.cannotModify -import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT import org.jetbrains.kotlin.analysis.api.tokens.hackyAllowRunningOnEdt +import org.jetbrains.kotlin.asJava.classes.* +import org.jetbrains.kotlin.light.classes.symbol.classes.checkIsInheritor import javax.swing.Icon abstract class FirLightClassBase protected constructor(manager: PsiManager) : LightElement(manager, KotlinLanguage.INSTANCE), PsiClass, @@ -106,6 +101,20 @@ abstract class FirLightClassBase protected constructor(manager: PsiManager) : Li ) } + override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean { + if (manager.areElementsEquivalent(baseClass, this)) return false + LightClassInheritanceHelper.getService(project).isInheritor(this, baseClass, checkDeep).ifSure { return it } + + val thisClassOrigin = kotlinOrigin + val baseClassOrigin = (baseClass as? KtLightClass)?.kotlinOrigin + + return if (baseClassOrigin != null && thisClassOrigin != null) { + thisClassOrigin.checkIsInheritor(baseClassOrigin, checkDeep) + } else { + InheritanceImplUtil.isInheritor(this, baseClass, checkDeep) + } + } + override fun getText(): String = kotlinOrigin?.text ?: "" override fun getLanguage(): KotlinLanguage = KotlinLanguage.INSTANCE diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt index 1f57ed75236..c7fa8887c40 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/FirLightClassForClassOrObjectSymbol.kt @@ -135,20 +135,6 @@ internal abstract class FirLightClassForClassOrObjectSymbol( override fun isValid(): Boolean = kotlinOrigin?.isValid ?: true - override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean { - if (manager.areElementsEquivalent(baseClass, this)) return false - LightClassInheritanceHelper.getService(project).isInheritor(this, baseClass, checkDeep).ifSure { return it } - - val thisClassOrigin = kotlinOrigin - val baseClassOrigin = (baseClass as? KtLightClass)?.kotlinOrigin - - return if (baseClassOrigin != null && thisClassOrigin != null) { - thisClassOrigin.checkIsInheritor(baseClassOrigin, checkDeep) - } else { - InheritanceImplUtil.isInheritor(this, baseClass, checkDeep) - } - } - override fun toString() = "${this::class.java.simpleName}:${kotlinOrigin?.getDebugText()}" diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt index ea74d5bef8f..ab220786000 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/firLightClassUtils.kt @@ -435,8 +435,8 @@ internal fun KtSymbolWithMembers.createInnerClasses( internal fun KtClassOrObject.checkIsInheritor(baseClassOrigin: KtClassOrObject, checkDeep: Boolean): Boolean { return analyseForLightClasses(this) { - val subClassSymbol = this@checkIsInheritor.getNamedClassOrObjectSymbol() ?: return false - val superClassSymbol = baseClassOrigin.getNamedClassOrObjectSymbol() ?: return false + val subClassSymbol = this@checkIsInheritor.getClassOrObjectSymbol() + val superClassSymbol = baseClassOrigin.getClassOrObjectSymbol() if (subClassSymbol == superClassSymbol) return@analyseForLightClasses false