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