Analysis LC: fix isSubClass check for local LC
This commit is contained in:
-2
@@ -98,8 +98,6 @@ internal class FirLightAnonymousClassForSymbol(
|
|||||||
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
|
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
|
||||||
override fun getSupers(): Array<PsiClass> = PsiClassImplUtil.getSupers(this)
|
override fun getSupers(): Array<PsiClass> = PsiClassImplUtil.getSupers(this)
|
||||||
override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
|
override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
|
||||||
override fun isInheritor(baseClass: PsiClass, checkDeep: Boolean): Boolean =
|
|
||||||
InheritanceImplUtil.isInheritor(this, baseClass, checkDeep)
|
|
||||||
|
|
||||||
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean =
|
override fun isInheritorDeep(baseClass: PsiClass?, classToByPass: PsiClass?): Boolean =
|
||||||
baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false
|
baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false
|
||||||
|
|||||||
+17
-8
@@ -22,10 +22,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.util.Pair
|
import com.intellij.openapi.util.Pair
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiCachedValueImpl
|
import com.intellij.psi.impl.*
|
||||||
import com.intellij.psi.impl.PsiClassImplUtil
|
|
||||||
import com.intellij.psi.impl.PsiImplUtil
|
|
||||||
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
|
||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.psi.impl.source.PsiExtensibleClass
|
import com.intellij.psi.impl.source.PsiExtensibleClass
|
||||||
import com.intellij.psi.javadoc.PsiDocComment
|
import com.intellij.psi.javadoc.PsiDocComment
|
||||||
@@ -34,14 +31,12 @@ import com.intellij.psi.util.CachedValueProvider
|
|||||||
import com.intellij.psi.util.PsiUtil
|
import com.intellij.psi.util.PsiUtil
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
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.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.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
|
import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.hackyAllowRunningOnEdt
|
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
|
import javax.swing.Icon
|
||||||
|
|
||||||
abstract class FirLightClassBase protected constructor(manager: PsiManager) : LightElement(manager, KotlinLanguage.INSTANCE), PsiClass,
|
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 getText(): String = kotlinOrigin?.text ?: ""
|
||||||
|
|
||||||
override fun getLanguage(): KotlinLanguage = KotlinLanguage.INSTANCE
|
override fun getLanguage(): KotlinLanguage = KotlinLanguage.INSTANCE
|
||||||
|
|||||||
-14
@@ -135,20 +135,6 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
|
|||||||
|
|
||||||
override fun isValid(): Boolean = kotlinOrigin?.isValid ?: true
|
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() =
|
override fun toString() =
|
||||||
"${this::class.java.simpleName}:${kotlinOrigin?.getDebugText()}"
|
"${this::class.java.simpleName}:${kotlinOrigin?.getDebugText()}"
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -435,8 +435,8 @@ internal fun KtSymbolWithMembers.createInnerClasses(
|
|||||||
|
|
||||||
internal fun KtClassOrObject.checkIsInheritor(baseClassOrigin: KtClassOrObject, checkDeep: Boolean): Boolean {
|
internal fun KtClassOrObject.checkIsInheritor(baseClassOrigin: KtClassOrObject, checkDeep: Boolean): Boolean {
|
||||||
return analyseForLightClasses(this) {
|
return analyseForLightClasses(this) {
|
||||||
val subClassSymbol = this@checkIsInheritor.getNamedClassOrObjectSymbol() ?: return false
|
val subClassSymbol = this@checkIsInheritor.getClassOrObjectSymbol()
|
||||||
val superClassSymbol = baseClassOrigin.getNamedClassOrObjectSymbol() ?: return false
|
val superClassSymbol = baseClassOrigin.getClassOrObjectSymbol()
|
||||||
|
|
||||||
if (subClassSymbol == superClassSymbol) return@analyseForLightClasses false
|
if (subClassSymbol == superClassSymbol) return@analyseForLightClasses false
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user