diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightAnonymousClass.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightAnonymousClass.kt index a92e0f3b2f4..735c8a7acee 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightAnonymousClass.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightAnonymousClass.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.asJava.elements.KtLightMethod -import org.jetbrains.kotlin.light.classes.symbol.SymbolFakeFile import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind @@ -129,14 +128,6 @@ internal class SymbolLightAnonymousClass( override fun isEquivalentTo(another: PsiElement?): Boolean = equals(another) //TODO - //TODO Make containing file not null for symbol without psi - private val _containingFile: PsiFile? by lazyPub { - val kotlinOrigin = kotlinOrigin ?: return@lazyPub null - SymbolFakeFile(kotlinOrigin, this) - } - - override fun getContainingFile(): PsiFile? = _containingFile - override fun equals(other: Any?): Boolean = this === other || (other is SymbolLightAnonymousClass && anonymousObjectSymbol == other.anonymousObjectSymbol) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassBase.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassBase.kt index 2500733bc13..209f55ca57c 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassBase.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassBase.kt @@ -23,7 +23,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker import org.jetbrains.kotlin.asJava.classes.* +import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.KotlinLanguage +import org.jetbrains.kotlin.light.classes.symbol.SymbolFakeFile +import org.jetbrains.kotlin.utils.addToStdlib.ifFalse import javax.swing.Icon context(KtAnalysisSession) @@ -108,6 +111,16 @@ abstract class SymbolLightClassBase protected constructor( } } + protected open val isTopLevel: Boolean = false + + private val _containingFile: PsiFile? by lazyPub { + val kotlinOrigin = kotlinOrigin ?: return@lazyPub null + val containingClass = isTopLevel.ifFalse { getOutermostClassOrObject(kotlinOrigin).toLightClass() } ?: this + SymbolFakeFile(kotlinOrigin, containingClass) + } + + override fun getContainingFile(): PsiFile? = _containingFile + private fun PsiClass.hasSuper( baseClass: PsiClass, checkDeep: Boolean, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt index c3820a817ae..5e2ada33305 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt @@ -16,13 +16,11 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind -import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.toLightClass -import org.jetbrains.kotlin.light.classes.symbol.SymbolFakeFile import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.allowLightClassesOnEdt import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation @@ -38,7 +36,6 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.debugText.getDebugText import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub import org.jetbrains.kotlin.utils.addToStdlib.applyIf -import org.jetbrains.kotlin.utils.addToStdlib.ifFalse import org.jetbrains.kotlin.utils.addToStdlib.ifTrue import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -49,7 +46,7 @@ internal abstract class SymbolLightClassForClassOrObject( ) : SymbolLightClassBase(manager), StubBasedPsiElement> { - protected val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL + override val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL internal val isCompanionObject: Boolean get() = classOrObjectSymbol.classKind == KtClassKind.COMPANION_OBJECT @@ -157,17 +154,6 @@ internal abstract class SymbolLightClassForClassOrObject( private val KtPropertySymbol.isConst: Boolean get() = (this as? KtKotlinPropertySymbol)?.isConst == true - private val _containingFile: PsiFile? by lazyPub { - - val kotlinOrigin = kotlinOrigin ?: return@lazyPub null - - val containingClass = isTopLevel.ifFalse { getOutermostClassOrObject(kotlinOrigin).toLightClass() } ?: this - - SymbolFakeFile(kotlinOrigin, containingClass) - } - - override fun getContainingFile(): PsiFile? = _containingFile - override fun getNavigationElement(): PsiElement = kotlinOrigin ?: this override fun isEquivalentTo(another: PsiElement?): Boolean =