[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.name.Name
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.psi.KtClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtEnumEntry
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.DataClassResolver
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions.EQUALS
|
||||
@@ -222,7 +219,7 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
|
||||
addPropertyBackingFields(result, classOrObjectSymbol)
|
||||
|
||||
// Next, add INSTANCE field if non-local named object
|
||||
addInstanceFieldIfNeeded(result, classOrObjectSymbol)
|
||||
addInstanceFieldIfNeeded(result)
|
||||
|
||||
// Last, add fields for enum entries
|
||||
addFieldsForEnumEntries(result, classOrObjectSymbol)
|
||||
@@ -269,12 +266,11 @@ internal open class SymbolLightClass(classOrObject: KtClassOrObject, ktModule: K
|
||||
propertyGroups[false]?.forEach(::addPropertyBackingField)
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
|
||||
private fun addInstanceFieldIfNeeded(result: MutableList<KtLightField>) {
|
||||
if (isNamedObject && !isLocal) {
|
||||
result.add(
|
||||
SymbolLightFieldForObject(
|
||||
objectSymbol = classOrObjectSymbol,
|
||||
objectDeclaration = classOrObject as KtObjectDeclaration,
|
||||
containingClass = this@SymbolLightClass,
|
||||
name = JvmAbi.INSTANCE_FIELD,
|
||||
lightMemberOrigin = null
|
||||
|
||||
+5
-7
@@ -136,16 +136,14 @@ abstract class SymbolLightClassForClassOrObject(protected val classOrObject: KtC
|
||||
}
|
||||
}
|
||||
|
||||
protected fun addCompanionObjectFieldIfNeeded(
|
||||
result: MutableList<KtLightField>,
|
||||
): Unit = withNamedClassOrObjectSymbol { classOrObjectSymbol ->
|
||||
classOrObjectSymbol.companionObject?.run {
|
||||
protected fun addCompanionObjectFieldIfNeeded(result: MutableList<KtLightField>) {
|
||||
classOrObject.companionObjects.forEach {
|
||||
result.add(
|
||||
SymbolLightFieldForObject(
|
||||
objectSymbol = this,
|
||||
objectDeclaration = it,
|
||||
containingClass = this@SymbolLightClassForClassOrObject,
|
||||
name = name.asString(),
|
||||
lightMemberOrigin = null
|
||||
name = it.name ?: return@forEach,
|
||||
lightMemberOrigin = null,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
+27
-18
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.light.classes.symbol.fields
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.annotations.NotNull
|
||||
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.asJava.builder.LightMemberOrigin
|
||||
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.annotations.SymbolLightSimpleAnnotation
|
||||
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.nonExistentType
|
||||
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(
|
||||
private val objectSymbol: KtNamedClassOrObjectSymbol,
|
||||
private val objectDeclaration: KtObjectDeclaration,
|
||||
containingClass: KtLightClass,
|
||||
private val name: String,
|
||||
lightMemberOrigin: 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
|
||||
|
||||
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)
|
||||
SymbolLightMemberModifierList(this, modifiers, listOf(notNullAnnotation))
|
||||
}
|
||||
|
||||
private val _isDeprecated: Boolean by lazyPub {
|
||||
objectSymbol.hasDeprecatedAnnotation()
|
||||
withObjectDeclarationSymbol { objectSymbol ->
|
||||
objectSymbol.hasDeprecatedAnnotation()
|
||||
}
|
||||
}
|
||||
|
||||
override fun isDeprecated(): Boolean = _isDeprecated
|
||||
|
||||
override fun getModifierList(): PsiModifierList? = _modifierList
|
||||
override fun getModifierList(): PsiModifierList = _modifierList
|
||||
|
||||
private val _type: PsiType by lazyPub {
|
||||
objectSymbol.buildSelfClassType().asPsiType(this@SymbolLightFieldForObject)
|
||||
?: nonExistentType()
|
||||
withObjectDeclarationSymbol { objectSymbol ->
|
||||
objectSymbol.buildSelfClassType().asPsiType(this@SymbolLightFieldForObject)
|
||||
} ?: nonExistentType()
|
||||
}
|
||||
|
||||
private val _identifier: PsiIdentifier by lazyPub {
|
||||
SymbolLightIdentifier(this, objectSymbol)
|
||||
withObjectDeclarationSymbol { objectSymbol ->
|
||||
SymbolLightIdentifier(this@SymbolLightFieldForObject, objectSymbol)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getNameIdentifier(): PsiIdentifier = _identifier
|
||||
|
||||
|
||||
override fun getType(): PsiType = _type
|
||||
|
||||
override fun getInitializer(): PsiExpression? = null //TODO
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
this === other ||
|
||||
(other is SymbolLightFieldForObject &&
|
||||
kotlinOrigin == other.kotlinOrigin &&
|
||||
objectSymbol == other.objectSymbol)
|
||||
this === other || other is SymbolLightFieldForObject && objectDeclaration == other.objectDeclaration
|
||||
|
||||
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