From 63160293fb28a4ee8c585db57c82eea42b90e6dd Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Thu, 15 Apr 2021 18:55:53 +0200 Subject: [PATCH] [LC] Fix invalid nullability for properties Fixed #KT-46097 and #KT-41671 --- .../jetbrains/kotlin/asJava/elements/lightAnnotations.kt | 5 +++-- .../src/org/jetbrains/kotlin/asJava/lightClassUtils.kt | 2 +- compiler/testData/asJava/ultraLightClasses/constructors.kt | 5 ++++- compiler/testData/asJava/ultraLightClasses/properties.kt | 6 ++++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt index 0a2ecf2951c..f9d1502f409 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt @@ -346,13 +346,14 @@ open class KtLightNullabilityAnnotation(false)?.let { it.typeReference?.getType() - ?: it.initializer + ?: (it.initializer ?: it.getter?.initializer) ?.let { initializer -> initializer.getType(initializer.analyze()) } } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt index 0aacc958f39..df4f4cea606 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/lightClassUtils.kt @@ -253,7 +253,7 @@ fun fastCheckIsNullabilityApplied(lightElement: KtLightElement<*, PsiModifierLis } val parent = annotatedElement.parent.parent - if (parent is KtModifierListOwner && parent.isPrivate()) return false + if (parent is KtModifierListOwner && parent !is KtPrimaryConstructor && parent.isPrivate()) return false if (parent is KtPropertyAccessor) { val propertyOfAccessor = parent.parent diff --git a/compiler/testData/asJava/ultraLightClasses/constructors.kt b/compiler/testData/asJava/ultraLightClasses/constructors.kt index ed28301c752..e8090c68af9 100644 --- a/compiler/testData/asJava/ultraLightClasses/constructors.kt +++ b/compiler/testData/asJava/ultraLightClasses/constructors.kt @@ -1,4 +1,3 @@ - class TestConstructor private constructor(p: Int = 1) class A(vararg a: Int, f: () -> Unit) {} @@ -15,3 +14,7 @@ class Outer { sealed class A(val x: String? = null) { class C : A() } + +class ClassWithPrivateCtor private constructor( + public val property: Set +) \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightClasses/properties.kt b/compiler/testData/asJava/ultraLightClasses/properties.kt index 2bff3f7785c..a66a95daeb9 100644 --- a/compiler/testData/asJava/ultraLightClasses/properties.kt +++ b/compiler/testData/asJava/ultraLightClasses/properties.kt @@ -101,3 +101,9 @@ interface A { public get internal set } + +class Foo { + val foo get() = getMeNonNullFoo() + val foo2: Foo get() = getMeNonNullFoo() + fun getMeNonNullFoo() : Foo = Foo() +} \ No newline at end of file