Support lateinit modifier on top-level properties
Allow lateinit modifier on top-level properties. Modifiers 'lateinit' and 'header' are incompatible.
This commit is contained in:
@@ -74,7 +74,7 @@ object ModifierCheckerCore {
|
||||
REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER),
|
||||
VARARG_KEYWORD to EnumSet.of(VALUE_PARAMETER, PROPERTY_PARAMETER),
|
||||
COMPANION_KEYWORD to EnumSet.of(OBJECT),
|
||||
LATEINIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY, LOCAL_VARIABLE),
|
||||
LATEINIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, LOCAL_VARIABLE),
|
||||
DATA_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS),
|
||||
INLINE_KEYWORD to EnumSet.of(FUNCTION, PROPERTY, PROPERTY_GETTER, PROPERTY_SETTER),
|
||||
NOINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER),
|
||||
@@ -166,6 +166,9 @@ object ModifierCheckerCore {
|
||||
// (see the KEEP https://github.com/Kotlin/KEEP/blob/master/proposals/sealed-class-inheritance.md)
|
||||
result += incompatibilityRegister(SEALED_KEYWORD, INNER_KEYWORD)
|
||||
|
||||
// lateinit is incompatible with header
|
||||
result += incompatibilityRegister(LATEINIT_KEYWORD, HEADER_KEYWORD)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -46,8 +46,8 @@ public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER!>la
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var String.e12: String
|
||||
}
|
||||
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER, WRONG_MODIFIER_TARGET!>lateinit<!> val topLevel: String
|
||||
<!WRONG_MODIFIER_TARGET!>lateinit<!> var topLevelMutable: String
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val topLevel: String
|
||||
lateinit var topLevelMutable: String
|
||||
|
||||
public interface Intf {
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var str: String
|
||||
|
||||
Vendored
+1
-1
@@ -28,7 +28,7 @@ header var customAccessorVar: String
|
||||
|
||||
header <!CONST_VAL_WITHOUT_INITIALIZER!>const<!> val constVal: Int
|
||||
|
||||
header <!WRONG_MODIFIER_TARGET!>lateinit<!> var lateinitVar: String
|
||||
<!INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>lateinit<!> var lateinitVar: String
|
||||
|
||||
<!WRONG_MODIFIER_TARGET!>header<!> val delegated: String by Delegate
|
||||
object Delegate { operator fun getValue(x: Any?, y: Any?): String = "" }
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
object Delegate {
|
||||
operator fun getValue(instance: Any?, property: Any) : String = ""
|
||||
operator fun setValue(instance: Any?, property: Any, value: String) {}
|
||||
}
|
||||
|
||||
lateinit var testOk: String
|
||||
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val testErr0: Any
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var testErr1: Int
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var testErr2: Any?
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var testErr3: String = ""
|
||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var testErr4 by Delegate
|
||||
@@ -0,0 +1,17 @@
|
||||
package
|
||||
|
||||
public lateinit val testErr0: kotlin.Any
|
||||
public lateinit var testErr1: kotlin.Int
|
||||
public lateinit var testErr2: kotlin.Any?
|
||||
public lateinit var testErr3: kotlin.String
|
||||
public lateinit var testErr4: kotlin.String
|
||||
public lateinit var testOk: kotlin.String
|
||||
|
||||
public object Delegate {
|
||||
private constructor Delegate()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final operator fun getValue(/*0*/ instance: kotlin.Any?, /*1*/ property: kotlin.Any): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final operator fun setValue(/*0*/ instance: kotlin.Any?, /*1*/ property: kotlin.Any, /*2*/ value: kotlin.String): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -16174,6 +16174,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("lateinitOnTopLevel.kt")
|
||||
public void testLateinitOnTopLevel() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/properties/lateinitOnTopLevel.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/properties/inferenceFromGetters")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user