SLC: containingFile for all SLC classes, including enum entry
This commit is contained in:
committed by
Ilya Kirillov
parent
217829d1c6
commit
61d339e8f2
-9
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
|
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
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.annotations.hasJvmFieldAnnotation
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
||||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
@@ -129,14 +128,6 @@ internal class SymbolLightAnonymousClass(
|
|||||||
|
|
||||||
override fun isEquivalentTo(another: PsiElement?): Boolean = equals(another) //TODO
|
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 =
|
override fun equals(other: Any?): Boolean =
|
||||||
this === other ||
|
this === other ||
|
||||||
(other is SymbolLightAnonymousClass && anonymousObjectSymbol == other.anonymousObjectSymbol)
|
(other is SymbolLightAnonymousClass && anonymousObjectSymbol == other.anonymousObjectSymbol)
|
||||||
|
|||||||
+13
@@ -23,7 +23,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt
|
import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt
|
||||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||||
import org.jetbrains.kotlin.asJava.classes.*
|
import org.jetbrains.kotlin.asJava.classes.*
|
||||||
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
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
|
import javax.swing.Icon
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
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(
|
private fun PsiClass.hasSuper(
|
||||||
baseClass: PsiClass,
|
baseClass: PsiClass,
|
||||||
checkDeep: Boolean,
|
checkDeep: Boolean,
|
||||||
|
|||||||
+1
-15
@@ -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.*
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind
|
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.getParentForLocalDeclaration
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.asJava.toLightClass
|
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.SymbolLightIdentifier
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.allowLightClassesOnEdt
|
import org.jetbrains.kotlin.light.classes.symbol.allowLightClassesOnEdt
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
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.debugText.getDebugText
|
||||||
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
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.ifTrue
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
@@ -49,7 +46,7 @@ internal abstract class SymbolLightClassForClassOrObject(
|
|||||||
) : SymbolLightClassBase(manager),
|
) : SymbolLightClassBase(manager),
|
||||||
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||||
|
|
||||||
protected val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL
|
override val isTopLevel: Boolean = classOrObjectSymbol.symbolKind == KtSymbolKind.TOP_LEVEL
|
||||||
|
|
||||||
internal val isCompanionObject: Boolean
|
internal val isCompanionObject: Boolean
|
||||||
get() = classOrObjectSymbol.classKind == KtClassKind.COMPANION_OBJECT
|
get() = classOrObjectSymbol.classKind == KtClassKind.COMPANION_OBJECT
|
||||||
@@ -157,17 +154,6 @@ internal abstract class SymbolLightClassForClassOrObject(
|
|||||||
private val KtPropertySymbol.isConst: Boolean
|
private val KtPropertySymbol.isConst: Boolean
|
||||||
get() = (this as? KtKotlinPropertySymbol)?.isConst == true
|
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 getNavigationElement(): PsiElement = kotlinOrigin ?: this
|
||||||
|
|
||||||
override fun isEquivalentTo(another: PsiElement?): Boolean =
|
override fun isEquivalentTo(another: PsiElement?): Boolean =
|
||||||
|
|||||||
Reference in New Issue
Block a user