[SLC] make INSTANCE field for object public
^KT-56441 Fixed
This commit is contained in:
committed by
Space Team
parent
8e815e943e
commit
6c24436657
+1
-1
@@ -107,7 +107,7 @@ abstract class SymbolLightClassBase protected constructor(val ktModule: KtModule
|
||||
}
|
||||
}
|
||||
|
||||
protected open val isTopLevel: Boolean get() = false
|
||||
internal open val isTopLevel: Boolean get() = false
|
||||
|
||||
private val _containingFile: PsiFile? by lazyPub {
|
||||
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
|
||||
|
||||
+1
@@ -273,6 +273,7 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC
|
||||
containingClass = this,
|
||||
name = JvmAbi.INSTANCE_FIELD,
|
||||
lightMemberOrigin = null,
|
||||
isCompanion = false,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
+2
-4
@@ -26,8 +26,6 @@ import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForPrope
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isConstOrJvmField
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isLateInit
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.GranularModifiersBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.with
|
||||
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
||||
|
||||
@@ -137,6 +135,7 @@ abstract class SymbolLightClassForNamedClassLike : SymbolLightClassForClassLike<
|
||||
containingClass = this,
|
||||
name = it.name.asString(),
|
||||
lightMemberOrigin = null,
|
||||
isCompanion = true,
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -144,8 +143,7 @@ abstract class SymbolLightClassForNamedClassLike : SymbolLightClassForClassLike<
|
||||
|
||||
internal fun computeModifiers(modifier: String): Map<String, Boolean>? = when (modifier) {
|
||||
in GranularModifiersBox.VISIBILITY_MODIFIERS -> {
|
||||
val visibility = withClassOrObjectSymbol { it.toPsiVisibilityForClass(isNested = !isTopLevel) }
|
||||
GranularModifiersBox.VISIBILITY_MODIFIERS_MAP.with(visibility)
|
||||
GranularModifiersBox.computeVisibilityForClass(ktModule, classOrObjectSymbolPointer, isTopLevel)
|
||||
}
|
||||
|
||||
in GranularModifiersBox.MODALITY_MODIFIERS -> GranularModifiersBox.computeSimpleModality(ktModule, classOrObjectSymbolPointer)
|
||||
|
||||
+17
-9
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClas
|
||||
import org.jetbrains.kotlin.light.classes.symbol.compareSymbolPointers
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isValid
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.GranularModifiersBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.InitializedModifiersBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.nonExistentType
|
||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||
@@ -35,6 +36,7 @@ internal class SymbolLightFieldForObject private constructor(
|
||||
lightMemberOrigin: LightMemberOrigin?,
|
||||
private val objectSymbolPointer: KtSymbolPointer<KtNamedClassOrObjectSymbol>,
|
||||
override val kotlinOrigin: KtObjectDeclaration?,
|
||||
private val isCompanion: Boolean,
|
||||
) : SymbolLightField(containingClass, lightMemberOrigin) {
|
||||
internal constructor(
|
||||
ktAnalysisSession: KtAnalysisSession,
|
||||
@@ -42,12 +44,14 @@ internal class SymbolLightFieldForObject private constructor(
|
||||
name: String,
|
||||
lightMemberOrigin: LightMemberOrigin?,
|
||||
containingClass: SymbolLightClassForClassLike<*>,
|
||||
isCompanion: Boolean,
|
||||
) : this(
|
||||
containingClass = containingClass,
|
||||
name = name,
|
||||
lightMemberOrigin = lightMemberOrigin,
|
||||
kotlinOrigin = objectSymbol.sourcePsiSafe(),
|
||||
objectSymbolPointer = with(ktAnalysisSession) { objectSymbol.createPointer() },
|
||||
isCompanion = isCompanion,
|
||||
)
|
||||
|
||||
private inline fun <T> withObjectDeclarationSymbol(crossinline action: KtAnalysisSession.(KtNamedClassOrObjectSymbol) -> T): T =
|
||||
@@ -58,22 +62,26 @@ internal class SymbolLightFieldForObject private constructor(
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
SymbolLightMemberModifierList(
|
||||
containingDeclaration = this,
|
||||
modifiersBox = GranularModifiersBox(
|
||||
initialValue = GranularModifiersBox.MODALITY_MODIFIERS_MAP.mutate {
|
||||
it[PsiModifier.FINAL] = true
|
||||
it[PsiModifier.STATIC] = true
|
||||
},
|
||||
computer = ::computeModifiers,
|
||||
),
|
||||
modifiersBox = if (isCompanion) {
|
||||
GranularModifiersBox(
|
||||
initialValue = GranularModifiersBox.MODALITY_MODIFIERS_MAP.mutate {
|
||||
it[PsiModifier.FINAL] = true
|
||||
it[PsiModifier.STATIC] = true
|
||||
},
|
||||
computer = ::computeCompanionModifiers,
|
||||
)
|
||||
} else {
|
||||
InitializedModifiersBox(PsiModifier.PUBLIC, PsiModifier.STATIC, PsiModifier.FINAL)
|
||||
},
|
||||
annotationsBox = ComputeAllAtOnceAnnotationsBox { modifierList ->
|
||||
listOf(SymbolLightSimpleAnnotation(NotNull::class.java.name, modifierList))
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
private fun computeModifiers(modifier: String): Map<String, Boolean>? {
|
||||
private fun computeCompanionModifiers(modifier: String): Map<String, Boolean>? {
|
||||
if (modifier !in GranularModifiersBox.VISIBILITY_MODIFIERS) return null
|
||||
return GranularModifiersBox.computeVisibilityForMember(ktModule, objectSymbolPointer)
|
||||
return GranularModifiersBox.computeVisibilityForClass(ktModule, objectSymbolPointer, isTopLevel = false)
|
||||
}
|
||||
|
||||
private val _isDeprecated: Boolean by lazyPub {
|
||||
|
||||
+13
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.light.classes.symbol.computeSimpleModality
|
||||
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForClass
|
||||
import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember
|
||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||
import org.jetbrains.kotlin.utils.keysToMap
|
||||
@@ -71,6 +72,18 @@ internal class GranularModifiersBox(
|
||||
return VISIBILITY_MODIFIERS_MAP.with(visibility)
|
||||
}
|
||||
|
||||
internal fun computeVisibilityForClass(
|
||||
ktModule: KtModule,
|
||||
declarationPointer: KtSymbolPointer<KtSymbolWithVisibility>,
|
||||
isTopLevel: Boolean,
|
||||
): PersistentMap<String, Boolean> {
|
||||
val visibility = declarationPointer.withSymbol(ktModule) {
|
||||
it.toPsiVisibilityForClass(!isTopLevel)
|
||||
}
|
||||
|
||||
return VISIBILITY_MODIFIERS_MAP.with(visibility)
|
||||
}
|
||||
|
||||
internal fun computeSimpleModality(
|
||||
ktModule: KtModule,
|
||||
declarationPointer: KtSymbolPointer<KtSymbolWithModality>,
|
||||
|
||||
Reference in New Issue
Block a user