From 8999a2176431aa6279feec335111545535c6fa5d Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 1 Nov 2018 14:46:05 +0300 Subject: [PATCH] Refine visibility computation for lateinit's field in KtUltraLightClass --- .../kotlin/asJava/classes/ultraLightPsi.kt | 7 +++- .../ultraLightClasses/lateinitProperty.kt | 42 +++++++++++++++++++ .../UltraLightClassLoadingTestGenerated.java | 5 +++ 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index b85bad61ae7..7ca13af26c4 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -199,8 +199,11 @@ class KtUltraLightClass(classOrObject: KtClassOrObject, private val support: Ult val visibility = when { property.hasModifier(PRIVATE_KEYWORD) -> PsiModifier.PRIVATE - property.hasModifier(PROTECTED_KEYWORD) && property.hasModifier(LATEINIT_KEYWORD) -> PsiModifier.PROTECTED - property.hasModifier(CONST_KEYWORD) || (property.hasModifier(LATEINIT_KEYWORD) && property.setter == null) -> PsiModifier.PUBLIC + property.hasModifier(LATEINIT_KEYWORD) -> { + val declaration = property.setter ?: property + simpleVisibility(declaration) + } + property.hasModifier(CONST_KEYWORD) -> PsiModifier.PUBLIC else -> PsiModifier.PRIVATE } val modifiers = hashSetOf(visibility) diff --git a/compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt b/compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt new file mode 100644 index 00000000000..d664d81b00f --- /dev/null +++ b/compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt @@ -0,0 +1,42 @@ +open class A { + lateinit var a: String + + lateinit var b: String + private set + + lateinit var c: String + protected set + + lateinit var d: String + internal set +} + +open class B { + internal lateinit var a: String + + internal lateinit var b: String + private set + + internal lateinit var c: String + protected set + + internal lateinit var d: String + internal set +} + +open class C { + protected lateinit var a: String + + protected lateinit var b: String + private set + + protected lateinit var c: String + protected set +} + +open class D { + private lateinit var a: String + + private lateinit var b: String + private set +} diff --git a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java index fbdef2e4e3e..a214c3c90ea 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/asJava/classes/UltraLightClassLoadingTestGenerated.java @@ -104,6 +104,11 @@ public class UltraLightClassLoadingTestGenerated extends AbstractUltraLightClass runTest("compiler/testData/asJava/ultraLightClasses/jvmOverloads.kt"); } + @TestMetadata("lateinitProperty.kt") + public void testLateinitProperty() throws Exception { + runTest("compiler/testData/asJava/ultraLightClasses/lateinitProperty.kt"); + } + @TestMetadata("objects.kt") public void testObjects() throws Exception { runTest("compiler/testData/asJava/ultraLightClasses/objects.kt");