SLC: fix visibility of lateinit var
^KT-57569 Fixed
This commit is contained in:
-1
@@ -90,7 +90,6 @@ internal class SymbolLightClassForAnonymousObject : SymbolLightClassForClassLike
|
||||
nameGenerator,
|
||||
isTopLevel = false,
|
||||
forceStatic = false,
|
||||
takePropertyVisibility = propertySymbol.hasJvmFieldAnnotation(),
|
||||
result,
|
||||
)
|
||||
}
|
||||
|
||||
+3
-5
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||
import org.jetbrains.kotlin.light.classes.symbol.cachedValue
|
||||
import org.jetbrains.kotlin.light.classes.symbol.canHaveNonPrivateField
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.InitializedModifiersBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||
@@ -116,9 +117,7 @@ internal class SymbolLightClassForFacade(
|
||||
// If this facade represents multiple files, only `const` properties need to be generated.
|
||||
if (multiFileClass && !propertySymbol.isConst) continue
|
||||
|
||||
val forceStaticAndPropertyVisibility = propertySymbol.isConst ||
|
||||
propertySymbol.hasJvmFieldAnnotation() ||
|
||||
propertySymbol.isLateInit &&
|
||||
val forceStatic = propertySymbol.canHaveNonPrivateField &&
|
||||
propertySymbol.getter.isNullOrPublic() &&
|
||||
propertySymbol.setter.isNullOrPublic()
|
||||
|
||||
@@ -126,8 +125,7 @@ internal class SymbolLightClassForFacade(
|
||||
propertySymbol,
|
||||
nameGenerator,
|
||||
isTopLevel = true,
|
||||
forceStatic = forceStaticAndPropertyVisibility,
|
||||
takePropertyVisibility = forceStaticAndPropertyVisibility,
|
||||
forceStatic = forceStatic,
|
||||
result,
|
||||
)
|
||||
}
|
||||
|
||||
-2
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotat
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForObject
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
|
||||
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.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
|
||||
@@ -116,7 +115,6 @@ abstract class SymbolLightClassForNamedClassLike : SymbolLightClassForClassLike<
|
||||
lightMemberOrigin = null,
|
||||
isTopLevel = false,
|
||||
forceStatic = true,
|
||||
takePropertyVisibility = it.isConstOrJvmField || it.isLateInit,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
-11
@@ -39,8 +39,6 @@ import org.jetbrains.kotlin.light.classes.symbol.copy
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
|
||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForProperty
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isConst
|
||||
import org.jetbrains.kotlin.light.classes.symbol.isLateInit
|
||||
import org.jetbrains.kotlin.light.classes.symbol.mapType
|
||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightAccessorMethod
|
||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightConstructor
|
||||
@@ -366,7 +364,6 @@ internal fun SymbolLightClassBase.createField(
|
||||
nameGenerator: SymbolLightField.FieldNameGenerator,
|
||||
isTopLevel: Boolean,
|
||||
forceStatic: Boolean,
|
||||
takePropertyVisibility: Boolean,
|
||||
result: MutableList<KtLightField>
|
||||
) {
|
||||
if (!hasBackingField(declaration)) return
|
||||
@@ -385,7 +382,6 @@ internal fun SymbolLightClassBase.createField(
|
||||
lightMemberOrigin = null,
|
||||
isTopLevel = isTopLevel,
|
||||
forceStatic = forceStatic,
|
||||
takePropertyVisibility = takePropertyVisibility,
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -602,18 +598,11 @@ internal fun SymbolLightClassBase.addPropertyBackingFields(
|
||||
|
||||
val forceStatic = symbolWithMembers is KtClassOrObjectSymbol && symbolWithMembers.classKind.isObject
|
||||
fun addPropertyBackingField(propertySymbol: KtPropertySymbol) {
|
||||
val isJvmField = propertySymbol.hasJvmFieldAnnotation()
|
||||
val isLateInit = propertySymbol.isLateInit
|
||||
val isConst = propertySymbol.isConst
|
||||
|
||||
val takePropertyVisibility = isLateInit || isJvmField || isConst
|
||||
|
||||
createField(
|
||||
declaration = propertySymbol,
|
||||
nameGenerator = nameGenerator,
|
||||
isTopLevel = false,
|
||||
forceStatic = forceStatic,
|
||||
takePropertyVisibility = takePropertyVisibility,
|
||||
result = result
|
||||
)
|
||||
}
|
||||
|
||||
+16
-11
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||
@@ -36,7 +37,6 @@ internal class SymbolLightFieldForProperty private constructor(
|
||||
lightMemberOrigin: LightMemberOrigin?,
|
||||
private val isTopLevel: Boolean,
|
||||
private val forceStatic: Boolean,
|
||||
private val takePropertyVisibility: Boolean,
|
||||
override val kotlinOrigin: KtCallableDeclaration?,
|
||||
) : SymbolLightField(containingClass, lightMemberOrigin) {
|
||||
internal constructor(
|
||||
@@ -47,7 +47,6 @@ internal class SymbolLightFieldForProperty private constructor(
|
||||
lightMemberOrigin: LightMemberOrigin?,
|
||||
isTopLevel: Boolean,
|
||||
forceStatic: Boolean,
|
||||
takePropertyVisibility: Boolean,
|
||||
) : this(
|
||||
propertySymbolPointer = with(ktAnalysisSession) { propertySymbol.createPointer() },
|
||||
fieldName = fieldName,
|
||||
@@ -55,7 +54,6 @@ internal class SymbolLightFieldForProperty private constructor(
|
||||
lightMemberOrigin = lightMemberOrigin,
|
||||
isTopLevel = isTopLevel,
|
||||
forceStatic = forceStatic,
|
||||
takePropertyVisibility = takePropertyVisibility,
|
||||
kotlinOrigin = propertySymbol.sourcePsiSafe<KtCallableDeclaration>(),
|
||||
)
|
||||
|
||||
@@ -95,7 +93,20 @@ internal class SymbolLightFieldForProperty private constructor(
|
||||
override fun getName(): String = fieldName
|
||||
|
||||
private fun computeModifiers(modifier: String): Map<String, Boolean>? = when (modifier) {
|
||||
in GranularModifiersBox.VISIBILITY_MODIFIERS -> GranularModifiersBox.computeVisibilityForMember(ktModule, propertySymbolPointer)
|
||||
in GranularModifiersBox.VISIBILITY_MODIFIERS -> {
|
||||
val visibility = withPropertySymbol { propertySymbol ->
|
||||
when {
|
||||
propertySymbol.visibility.isPrivateOrPrivateToThis() -> PsiModifier.PRIVATE
|
||||
propertySymbol.canHaveNonPrivateField -> {
|
||||
val declaration = propertySymbol.setter ?: propertySymbol
|
||||
declaration.toPsiVisibilityForMember()
|
||||
}
|
||||
else -> PsiModifier.PRIVATE
|
||||
}
|
||||
}
|
||||
|
||||
GranularModifiersBox.VISIBILITY_MODIFIERS_MAP.with(visibility)
|
||||
}
|
||||
in GranularModifiersBox.MODALITY_MODIFIERS -> {
|
||||
val modality = withPropertySymbol { propertySymbol ->
|
||||
if (propertySymbol.isVal || propertySymbol.isDelegatedProperty) {
|
||||
@@ -135,15 +146,9 @@ internal class SymbolLightFieldForProperty private constructor(
|
||||
}
|
||||
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
val initializerValue = if (takePropertyVisibility) {
|
||||
emptyMap()
|
||||
} else {
|
||||
GranularModifiersBox.VISIBILITY_MODIFIERS_MAP.with(PsiModifier.PRIVATE)
|
||||
}
|
||||
|
||||
SymbolLightMemberModifierList(
|
||||
containingDeclaration = this,
|
||||
modifiersBox = GranularModifiersBox(initializerValue, ::computeModifiers),
|
||||
modifiersBox = GranularModifiersBox(computer = ::computeModifiers),
|
||||
annotationsBox = GranularAnnotationsBox(
|
||||
annotationsProvider = SymbolAnnotationsProvider(
|
||||
ktModule = ktModule,
|
||||
|
||||
+1
@@ -290,6 +290,7 @@ internal inline fun <T : KtSymbol, R> KtSymbolPointer<T>.withSymbol(
|
||||
internal val KtPropertySymbol.isConstOrJvmField: Boolean get() = isConst || hasJvmFieldAnnotation()
|
||||
internal val KtPropertySymbol.isConst: Boolean get() = (this as? KtKotlinPropertySymbol)?.isConst == true
|
||||
internal val KtPropertySymbol.isLateInit: Boolean get() = (this as? KtKotlinPropertySymbol)?.isLateInit == true
|
||||
internal val KtPropertySymbol.canHaveNonPrivateField: Boolean get() = isConstOrJvmField || isLateInit
|
||||
|
||||
internal inline fun <reified T> Collection<T>.toArrayIfNotEmptyOrDefault(default: Array<T>): Array<T> {
|
||||
return if (isNotEmpty()) toTypedArray() else default
|
||||
|
||||
-27
@@ -1,27 +0,0 @@
|
||||
public final class LateinitPropertyKt /* LateinitPropertyKt*/ {
|
||||
private static java.lang.String b;
|
||||
|
||||
private static java.lang.String c;
|
||||
|
||||
public static java.lang.String a;
|
||||
|
||||
public static java.lang.String d;
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final java.lang.String getA();// getA()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final java.lang.String getB();// getB()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final java.lang.String getC();// getC()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final java.lang.String getD();// getD()
|
||||
|
||||
protected static final void setC(@org.jetbrains.annotations.NotNull() java.lang.String);// setC(java.lang.String)
|
||||
|
||||
public static final void setA(@org.jetbrains.annotations.NotNull() java.lang.String);// setA(java.lang.String)
|
||||
|
||||
public static final void setD(@org.jetbrains.annotations.NotNull() java.lang.String);// setD(java.lang.String)
|
||||
}
|
||||
+1
-1
@@ -63,7 +63,7 @@ public final class PropertiesKt /* PropertiesKt*/ {
|
||||
|
||||
private static java.lang.String internalVarPrivateSet;
|
||||
|
||||
private static java.lang.String protectedLateinitVar;
|
||||
protected static java.lang.String protectedLateinitVar;
|
||||
|
||||
public static Unresolved subject;
|
||||
|
||||
|
||||
+10
-10
@@ -1,10 +1,10 @@
|
||||
public class A /* A*/ {
|
||||
private java.lang.String b;
|
||||
|
||||
protected java.lang.String c;
|
||||
|
||||
public java.lang.String a;
|
||||
|
||||
public java.lang.String b;
|
||||
|
||||
public java.lang.String c;
|
||||
|
||||
public java.lang.String d;
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
@@ -29,12 +29,12 @@ public class A /* A*/ {
|
||||
}
|
||||
|
||||
public class B /* B*/ {
|
||||
private java.lang.String b;
|
||||
|
||||
protected java.lang.String c;
|
||||
|
||||
public java.lang.String a;
|
||||
|
||||
public java.lang.String b;
|
||||
|
||||
public java.lang.String c;
|
||||
|
||||
public java.lang.String d;
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
@@ -59,9 +59,9 @@ public class B /* B*/ {
|
||||
}
|
||||
|
||||
public class C /* C*/ {
|
||||
protected java.lang.String a;
|
||||
private java.lang.String b;
|
||||
|
||||
protected java.lang.String b;
|
||||
protected java.lang.String a;
|
||||
|
||||
protected java.lang.String c;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user