[SLC] drop KtAnalysisSession from SymbolLightFieldForObject
^KT-54051
This commit is contained in:
committed by
Space Team
parent
d57f3c6d18
commit
b6baa1e3f6
+4
-8
@@ -35,10 +35,7 @@ import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForClass
|
|||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
|
||||||
import org.jetbrains.kotlin.psi.KtEnumEntry
|
|
||||||
import org.jetbrains.kotlin.resolve.DataClassResolver
|
import org.jetbrains.kotlin.resolve.DataClassResolver
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS
|
import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS
|
||||||
@@ -222,7 +219,7 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
|
|||||||
addPropertyBackingFields(result, classOrObjectSymbol)
|
addPropertyBackingFields(result, classOrObjectSymbol)
|
||||||
|
|
||||||
// Next, add INSTANCE field if non-local named object
|
// Next, add INSTANCE field if non-local named object
|
||||||
addInstanceFieldIfNeeded(result, classOrObjectSymbol)
|
addInstanceFieldIfNeeded(result)
|
||||||
|
|
||||||
// Last, add fields for enum entries
|
// Last, add fields for enum entries
|
||||||
addFieldsForEnumEntries(result, classOrObjectSymbol)
|
addFieldsForEnumEntries(result, classOrObjectSymbol)
|
||||||
@@ -269,12 +266,11 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
|
|||||||
propertyGroups[false]?.forEach(::addPropertyBackingField)
|
propertyGroups[false]?.forEach(::addPropertyBackingField)
|
||||||
}
|
}
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>) {
|
||||||
private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
|
|
||||||
if (isNamedObject && !isLocal) {
|
if (isNamedObject && !isLocal) {
|
||||||
result.add(
|
result.add(
|
||||||
SymbolLightFieldForObject(
|
SymbolLightFieldForObject(
|
||||||
objectSymbol = classOrObjectSymbol,
|
objectDeclaration = classOrObject as KtObjectDeclaration,
|
||||||
containingClass = this@SymbolLightClass,
|
containingClass = this@SymbolLightClass,
|
||||||
name = JvmAbi.INSTANCE_FIELD,
|
name = JvmAbi.INSTANCE_FIELD,
|
||||||
lightMemberOrigin = null
|
lightMemberOrigin = null
|
||||||
|
|||||||
+5
-7
@@ -136,16 +136,14 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun addCompanionObjectFieldIfNeeded(
|
protected fun addCompanionObjectFieldIfNeeded(result: MutableList<KtLightField>) {
|
||||||
result: MutableList<KtLightField>,
|
classOrObject.companionObjects.forEach {
|
||||||
): Unit = withNamedClassOrObjectSymbol { classOrObjectSymbol ->
|
|
||||||
classOrObjectSymbol.companionObject?.run {
|
|
||||||
result.add(
|
result.add(
|
||||||
SymbolLightFieldForObject(
|
SymbolLightFieldForObject(
|
||||||
objectSymbol = this,
|
objectDeclaration = it,
|
||||||
containingClass = this@SymbolLightClassForClassOrObject,
|
containingClass = this@SymbolLightClassForClassOrObject,
|
||||||
name = name.asString(),
|
name = it.name ?: return@forEach,
|
||||||
lightMemberOrigin = null
|
lightMemberOrigin = null,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-18
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.fields
|
|||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.annotations.NotNull
|
import org.jetbrains.annotations.NotNull
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.isValid
|
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
@@ -16,60 +15,70 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
|
|||||||
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
|
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolLightSimpleAnnotation
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.classes.analyzeForLightClasses
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
|
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtObjectDeclaration
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
|
||||||
internal class SymbolLightFieldForObject(
|
internal class SymbolLightFieldForObject(
|
||||||
private val objectSymbol: KtNamedClassOrObjectSymbol,
|
private val objectDeclaration: KtObjectDeclaration,
|
||||||
containingClass: KtLightClass,
|
containingClass: KtLightClass,
|
||||||
private val name: String,
|
private val name: String,
|
||||||
lightMemberOrigin: LightMemberOrigin?,
|
lightMemberOrigin: LightMemberOrigin?,
|
||||||
) : SymbolLightField(containingClass, lightMemberOrigin) {
|
) : SymbolLightField(containingClass, lightMemberOrigin) {
|
||||||
|
private fun <T> withObjectDeclarationSymbol(action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T =
|
||||||
|
analyzeForLightClasses(objectDeclaration) {
|
||||||
|
val namedClassOrObjectSymbol = objectDeclaration.getNamedClassOrObjectSymbol()
|
||||||
|
require(namedClassOrObjectSymbol != null)
|
||||||
|
action(namedClassOrObjectSymbol)
|
||||||
|
}
|
||||||
|
|
||||||
override val kotlinOrigin: KtDeclaration? = objectSymbol.psi as? KtDeclaration
|
override val kotlinOrigin: KtObjectDeclaration = objectDeclaration
|
||||||
|
|
||||||
override fun getName(): String = name
|
override fun getName(): String = name
|
||||||
|
|
||||||
private val _modifierList: PsiModifierList by lazyPub {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
val modifiers = setOf(objectSymbol.toPsiVisibilityForMember(), PsiModifier.STATIC, PsiModifier.FINAL)
|
val modifiers = withObjectDeclarationSymbol { objectSymbol ->
|
||||||
|
setOf(objectSymbol.toPsiVisibilityForMember(), PsiModifier.STATIC, PsiModifier.FINAL)
|
||||||
|
}
|
||||||
|
|
||||||
val notNullAnnotation = SymbolLightSimpleAnnotation(NotNull::class.java.name, this)
|
val notNullAnnotation = SymbolLightSimpleAnnotation(NotNull::class.java.name, this)
|
||||||
SymbolLightMemberModifierList(this, modifiers, listOf(notNullAnnotation))
|
SymbolLightMemberModifierList(this, modifiers, listOf(notNullAnnotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _isDeprecated: Boolean by lazyPub {
|
private val _isDeprecated: Boolean by lazyPub {
|
||||||
objectSymbol.hasDeprecatedAnnotation()
|
withObjectDeclarationSymbol { objectSymbol ->
|
||||||
|
objectSymbol.hasDeprecatedAnnotation()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isDeprecated(): Boolean = _isDeprecated
|
override fun isDeprecated(): Boolean = _isDeprecated
|
||||||
|
|
||||||
override fun getModifierList(): PsiModifierList? = _modifierList
|
override fun getModifierList(): PsiModifierList = _modifierList
|
||||||
|
|
||||||
private val _type: PsiType by lazyPub {
|
private val _type: PsiType by lazyPub {
|
||||||
objectSymbol.buildSelfClassType().asPsiType(this@SymbolLightFieldForObject)
|
withObjectDeclarationSymbol { objectSymbol ->
|
||||||
?: nonExistentType()
|
objectSymbol.buildSelfClassType().asPsiType(this@SymbolLightFieldForObject)
|
||||||
|
} ?: nonExistentType()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _identifier: PsiIdentifier by lazyPub {
|
private val _identifier: PsiIdentifier by lazyPub {
|
||||||
SymbolLightIdentifier(this, objectSymbol)
|
withObjectDeclarationSymbol { objectSymbol ->
|
||||||
|
SymbolLightIdentifier(this@SymbolLightFieldForObject, objectSymbol)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getNameIdentifier(): PsiIdentifier = _identifier
|
override fun getNameIdentifier(): PsiIdentifier = _identifier
|
||||||
|
|
||||||
|
|
||||||
override fun getType(): PsiType = _type
|
override fun getType(): PsiType = _type
|
||||||
|
|
||||||
override fun getInitializer(): PsiExpression? = null //TODO
|
override fun getInitializer(): PsiExpression? = null //TODO
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean =
|
override fun equals(other: Any?): Boolean =
|
||||||
this === other ||
|
this === other || other is SymbolLightFieldForObject && objectDeclaration == other.objectDeclaration
|
||||||
(other is SymbolLightFieldForObject &&
|
|
||||||
kotlinOrigin == other.kotlinOrigin &&
|
|
||||||
objectSymbol == other.objectSymbol)
|
|
||||||
|
|
||||||
override fun hashCode(): Int = kotlinOrigin.hashCode()
|
override fun hashCode(): Int = objectDeclaration.hashCode()
|
||||||
|
|
||||||
override fun isValid(): Boolean = super.isValid() && objectSymbol.isValid()
|
override fun isValid(): Boolean = objectDeclaration.isValid
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user