diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt index 10b8afc096b..6bd4e194b45 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/SymbolLightFieldForProperty.kt @@ -98,12 +98,10 @@ internal class SymbolLightFieldForProperty private constructor( in GranularModifiersBox.VISIBILITY_MODIFIERS -> GranularModifiersBox.computeVisibilityForMember(ktModule, propertySymbolPointer) in GranularModifiersBox.MODALITY_MODIFIERS -> { val modality = withPropertySymbol { propertySymbol -> - if (propertySymbol.isVal) { + if (propertySymbol.isVal || propertySymbol.isDelegatedProperty) { PsiModifier.FINAL } else { - propertySymbol.computeSimpleModality()?.takeIf { - it != PsiModifier.FINAL || isTopLevel && propertySymbol.isDelegatedProperty - } + propertySymbol.computeSimpleModality()?.takeIf { it != PsiModifier.FINAL } } } @@ -154,10 +152,10 @@ internal class SymbolLightFieldForProperty private constructor( ), additionalAnnotationsProvider = NullabilityAnnotationsProvider { withPropertySymbol { propertySymbol -> - if (!(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit)) { - getTypeNullability(propertySymbol.returnType) - } else { - NullabilityType.Unknown + when { + propertySymbol.isDelegatedProperty -> NullabilityType.NotNull + !(propertySymbol is KtKotlinPropertySymbol && propertySymbol.isLateInit) -> getTypeNullability(propertySymbol.returnType) + else -> NullabilityType.Unknown } } } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java index ab449f653b8..92059165e3f 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.fir.java @@ -5,6 +5,9 @@ public static abstract class Base /* Container.Base*/ { @org.jetbrains.annotations.NotNull() private final Container.Delegate b$delegate; + @org.jetbrains.annotations.NotNull() + private final Container.Delegate mutable$delegate; + @org.jetbrains.annotations.NotNull() private final java.lang.String c = "" /* initializer type: java.lang.String */; @@ -20,7 +23,12 @@ public static abstract class Base /* Container.Base*/ { @org.jetbrains.annotations.NotNull() public java.lang.String getC();// getC() + @org.jetbrains.annotations.Nullable() + public final java.lang.String getMutable();// getMutable() + public Base();// .ctor() + + public final void setMutable(@org.jetbrains.annotations.Nullable() java.lang.String);// setMutable(java.lang.String) } public static final class Companion /* Container.Companion*/ { diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.java index f4cc328f222..a12b32603c4 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.java @@ -5,6 +5,9 @@ public static abstract class Base /* Container.Base*/ { @org.jetbrains.annotations.NotNull() private final Container.Delegate b$delegate; + @org.jetbrains.annotations.NotNull() + private final Container.Delegate mutable$delegate; + @org.jetbrains.annotations.NotNull() private final java.lang.String c; @@ -20,7 +23,12 @@ public static abstract class Base /* Container.Base*/ { @org.jetbrains.annotations.NotNull() public java.lang.String getC();// getC() + @org.jetbrains.annotations.Nullable() + public final java.lang.String getMutable();// getMutable() + public Base();// .ctor() + + public final void setMutable(@org.jetbrains.annotations.Nullable() java.lang.String);// setMutable(java.lang.String) } public static final class Companion /* Container.Companion*/ { diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.kt index d90fb8c4571..9e6449c584b 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.kt +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/DelegatedProperty.kt @@ -15,6 +15,7 @@ class Container { abstract class Base { val a: String by delegate() + var mutable: String? by delegate() open val b: String by delegate() open val c: String = "" abstract val d: String diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java index 4dd5e8465e7..eaa6a65132b 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java @@ -2,6 +2,9 @@ public final class PropertiesKt /* PropertiesKt*/ { @org.jetbrains.annotations.NotNull() private static final error.NonExistentClass delegatedProp$delegate; + @org.jetbrains.annotations.NotNull() + private static final error.NonExistentClass delegatedProp2$delegate; + @org.jetbrains.annotations.NotNull() private static final java.lang.Object arrayConst; @@ -38,8 +41,6 @@ public final class PropertiesKt /* PropertiesKt*/ { @org.jetbrains.annotations.Nullable() private static java.lang.Integer isEmptyInt; - private static final error.NonExistentClass delegatedProp2$delegate; - private static final error.NonExistentClass intConst = 30 /* initializer type: int */; private static final int f1 = 2 /* initializer type: int */;