diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index 751f1a63876..2b5f892c0b5 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -207,7 +207,7 @@ internal class SymbolLightAccessorMethod private constructor( if (nullabilityApplicable) { containingPropertySymbolPointer.withSymbol(ktModule) { propertySymbol -> - getTypeNullability(propertySymbol.returnType) + if (propertySymbol.isLateInit) NullabilityType.NotNull else getTypeNullability(propertySymbol.returnType) } } else { NullabilityType.Unknown diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt index d7921026e15..05fa369bf32 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt @@ -48,7 +48,7 @@ internal abstract class SymbolLightParameterCommon( abstract override fun getModifierList(): PsiModifierList - protected fun nullabilityType(): NullabilityType { + protected open fun nullabilityType(): NullabilityType { if (isVarArgs) return NullabilityType.NotNull val nullabilityApplicable = !containingMethod.hasModifierProperty(PsiModifier.PRIVATE) && diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSetterParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSetterParameter.kt index d9bce8cab73..d2c5466277f 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSetterParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSetterParameter.kt @@ -13,7 +13,9 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget +import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.annotations.* +import org.jetbrains.kotlin.light.classes.symbol.isLateInit import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList import org.jetbrains.kotlin.light.classes.symbol.withSymbol @@ -59,5 +61,9 @@ internal class SymbolLightSetterParameter( ) } + override fun nullabilityType(): NullabilityType = + if (containingPropertySymbolPointer.withSymbol(ktModule) { it.isLateInit }) NullabilityType.NotNull else super.nullabilityType() + + override fun isVarArgs() = false } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java index a238621608b..881d74b5c9b 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java @@ -67,12 +67,17 @@ public final class PropertiesKt /* PropertiesKt*/ { public static Unresolved subject; + public static java.lang.String lateInit; + @org.jetbrains.annotations.NotNull() protected static final java.lang.String getProtectedLateinitVar();// getProtectedLateinitVar() @org.jetbrains.annotations.NotNull() protected static final java.lang.String getProtectedWithPrivateSet();// getProtectedWithPrivateSet() + @org.jetbrains.annotations.NotNull() + public static final Unresolved getSubject();// getSubject() + @org.jetbrains.annotations.NotNull() public static final java.lang.Object getArrayConst();// getArrayConst() @@ -82,6 +87,9 @@ public final class PropertiesKt /* PropertiesKt*/ { @org.jetbrains.annotations.NotNull() public static final java.lang.String getInternalVarPrivateSet();// getInternalVarPrivateSet() + @org.jetbrains.annotations.NotNull() + public static final java.lang.String getLateInit();// getLateInit() + @org.jetbrains.annotations.NotNull() public static final java.lang.String getLazyProp();// getLazyProp() @@ -125,8 +133,6 @@ public final class PropertiesKt /* PropertiesKt*/ { protected static final void setProtectedLateinitVar(@org.jetbrains.annotations.NotNull() java.lang.String);// setProtectedLateinitVar(java.lang.String) - public static final Unresolved getSubject();// getSubject() - public static final boolean isEmpty();// isEmpty() public static final error.NonExistentClass getDelegatedProp2();// getDelegatedProp2() @@ -165,13 +171,15 @@ public final class PropertiesKt /* PropertiesKt*/ { public static final void setIslowercase(@org.jetbrains.annotations.Nullable() java.lang.Boolean);// setIslowercase(java.lang.Boolean) + public static final void setLateInit(@org.jetbrains.annotations.NotNull() java.lang.String);// setLateInit(java.lang.String) + public static final void setLazyProp(@org.jetbrains.annotations.NotNull() java.lang.String);// setLazyProp(java.lang.String) public static final void setName(@org.jetbrains.annotations.NotNull() java.lang.String);// setName(java.lang.String) public static final void setStringRepresentation(@org.jetbrains.annotations.NotNull() java.lang.String);// setStringRepresentation(java.lang.String) - public static final void setSubject(Unresolved);// setSubject(Unresolved) + public static final void setSubject(@org.jetbrains.annotations.NotNull() Unresolved);// setSubject(Unresolved) public static final void setValue(T, @org.jetbrains.annotations.NotNull() kotlin.reflect.KProperty, int);// setValue(T, kotlin.reflect.KProperty, int) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.java index 3db27919f60..3611c06ba15 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.java @@ -64,6 +64,8 @@ public final class PropertiesKt /* PropertiesKt*/ { public static error.NonExistentClass subject; + public static java.lang.String lateInit; + @org.jetbrains.annotations.NotNull() protected static final java.lang.String getProtectedLateinitVar();// getProtectedLateinitVar() @@ -79,6 +81,9 @@ public final class PropertiesKt /* PropertiesKt*/ { @org.jetbrains.annotations.NotNull() public static final java.lang.String getInternalVarPrivateSet();// getInternalVarPrivateSet() + @org.jetbrains.annotations.NotNull() + public static final java.lang.String getLateInit();// getLateInit() + @org.jetbrains.annotations.NotNull() public static final java.lang.String getLazyProp();// getLazyProp() @@ -162,6 +167,8 @@ public final class PropertiesKt /* PropertiesKt*/ { public static final void setIslowercase(@org.jetbrains.annotations.Nullable() java.lang.Boolean);// setIslowercase(java.lang.Boolean) + public static final void setLateInit(@org.jetbrains.annotations.NotNull() java.lang.String);// setLateInit(java.lang.String) + public static final void setLazyProp(@org.jetbrains.annotations.NotNull() java.lang.String);// setLazyProp(java.lang.String) public static final void setName(@org.jetbrains.annotations.NotNull() java.lang.String);// setName(java.lang.String) diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.kt index 956e274eeb0..4db554e1477 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.kt +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.kt @@ -34,6 +34,8 @@ set(value) { if (value >= 0) field = value } +lateinit var lateInit: String + lateinit var subject: Unresolved internal lateinit var internalVarPrivateSet: String private set