Refine visibility computation for lateinit's field in KtUltraLightClass

This commit is contained in:
Denis Zharkov
2018-11-01 14:46:05 +03:00
parent 99afc40d93
commit 8999a21764
3 changed files with 52 additions and 2 deletions
@@ -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)
@@ -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
}
@@ -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");