Make lateinit diagnostics more clear
This commit is contained in:
@@ -328,12 +328,17 @@ public interface Errors {
|
|||||||
DiagnosticFactory0<JetExpression> PROPERTY_INITIALIZER_NO_BACKING_FIELD = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<JetExpression> PROPERTY_INITIALIZER_NO_BACKING_FIELD = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory0<JetExpression> PROPERTY_INITIALIZER_IN_TRAIT = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<JetExpression> PROPERTY_INITIALIZER_IN_TRAIT = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory0<JetProperty> FINAL_PROPERTY_IN_TRAIT = DiagnosticFactory0.create(ERROR, FINAL_MODIFIER);
|
DiagnosticFactory0<JetProperty> FINAL_PROPERTY_IN_TRAIT = DiagnosticFactory0.create(ERROR, FINAL_MODIFIER);
|
||||||
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER = DiagnosticFactory0.create(ERROR);
|
|
||||||
DiagnosticFactory0<JetProperty> BACKING_FIELD_IN_TRAIT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
DiagnosticFactory0<JetProperty> BACKING_FIELD_IN_TRAIT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||||
|
|
||||||
DiagnosticFactory0<JetSimpleNameExpression> BACKING_FIELD_SYNTAX_DEPRECATED = DiagnosticFactory0.create(WARNING);
|
DiagnosticFactory0<JetSimpleNameExpression> BACKING_FIELD_SYNTAX_DEPRECATED = DiagnosticFactory0.create(WARNING);
|
||||||
DiagnosticFactory0<JetSimpleNameExpression> BACKING_FIELD_USAGE_DEPRECATED = DiagnosticFactory0.create(WARNING);
|
DiagnosticFactory0<JetSimpleNameExpression> BACKING_FIELD_USAGE_DEPRECATED = DiagnosticFactory0.create(WARNING);
|
||||||
|
|
||||||
|
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER_PRIMARY_CONSTRUCTOR_PARAMETER = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE = DiagnosticFactory0.create(ERROR);
|
||||||
|
|
||||||
DiagnosticFactory2<JetModifierListOwner, String, ClassDescriptor> ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS = DiagnosticFactory2.create(ERROR, ABSTRACT_MODIFIER);
|
DiagnosticFactory2<JetModifierListOwner, String, ClassDescriptor> ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS = DiagnosticFactory2.create(ERROR, ABSTRACT_MODIFIER);
|
||||||
|
|
||||||
DiagnosticFactory0<JetPropertyAccessor> VAL_WITH_SETTER = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<JetPropertyAccessor> VAL_WITH_SETTER = DiagnosticFactory0.create(ERROR);
|
||||||
|
|||||||
+6
-1
@@ -205,8 +205,13 @@ public class DefaultErrorMessages {
|
|||||||
MAP.put(DELEGATED_PROPERTY_IN_TRAIT, "Delegated properties are not allowed in interfaces");
|
MAP.put(DELEGATED_PROPERTY_IN_TRAIT, "Delegated properties are not allowed in interfaces");
|
||||||
MAP.put(LOCAL_VARIABLE_WITH_DELEGATE, "Local variables are not allowed to have delegates");
|
MAP.put(LOCAL_VARIABLE_WITH_DELEGATE, "Local variables are not allowed to have delegates");
|
||||||
|
|
||||||
|
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER, "''lateinit'' modifier is allowed only on member properties with a backing field");
|
||||||
|
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE, "''lateinit'' modifier is allowed only on mutable properties");
|
||||||
|
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY, "''lateinit'' modifier is not allowed on abstract properties");
|
||||||
|
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER_PRIMARY_CONSTRUCTOR_PARAMETER, "''lateinit'' modifier is not allowed on primary constructor parameters");
|
||||||
|
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE, "''lateinit'' modifier is not allowed on nullable properties");
|
||||||
|
|
||||||
MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility");
|
MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility");
|
||||||
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER, "''lateinit'' modifier is allowed only on non-null member properties with a backing field");
|
|
||||||
MAP.put(BACKING_FIELD_IN_TRAIT, "Property in an interface cannot have a backing field");
|
MAP.put(BACKING_FIELD_IN_TRAIT, "Property in an interface cannot have a backing field");
|
||||||
MAP.put(MUST_BE_INITIALIZED, "Property must be initialized");
|
MAP.put(MUST_BE_INITIALIZED, "Property must be initialized");
|
||||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
|
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
|
||||||
|
|||||||
@@ -329,18 +329,43 @@ public class DeclarationsChecker {
|
|||||||
PsiElement modifier = modifierList.getModifier(JetTokens.LATE_INIT_KEYWORD);
|
PsiElement modifier = modifierList.getModifier(JetTokens.LATE_INIT_KEYWORD);
|
||||||
if (modifier == null) return;
|
if (modifier == null) return;
|
||||||
|
|
||||||
|
if (!propertyDescriptor.isVar()) {
|
||||||
|
trace.report(INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE.on(modifier));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean returnTypeIsNullable = true;
|
||||||
|
boolean returnTypeIsPrimitive = true;
|
||||||
|
|
||||||
|
JetType returnType = propertyDescriptor.getReturnType();
|
||||||
|
if (returnType != null) {
|
||||||
|
returnTypeIsNullable = TypeUtils.isNullableType(returnType);
|
||||||
|
returnTypeIsPrimitive = KotlinBuiltIns.isPrimitiveType(returnType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (returnTypeIsNullable) {
|
||||||
|
trace.report(INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE.on(modifier));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (propertyDescriptor.getModality() == Modality.ABSTRACT) {
|
||||||
|
trace.report(INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY.on(modifier));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property instanceof JetParameter) {
|
||||||
|
trace.report(INAPPLICABLE_LATEINIT_MODIFIER_PRIMARY_CONSTRUCTOR_PARAMETER.on(modifier));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
boolean hasBackingField =
|
boolean hasBackingField =
|
||||||
Boolean.TRUE.equals(trace.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor));
|
Boolean.TRUE.equals(trace.getBindingContext().get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor));
|
||||||
|
|
||||||
boolean hasDelegateOrInitializer = false;
|
boolean hasDelegateOrInitializer = false;
|
||||||
boolean hasCorrespondingValueParameter = false;
|
|
||||||
|
|
||||||
if (property instanceof JetProperty) {
|
if (property instanceof JetProperty) {
|
||||||
hasDelegateOrInitializer = ((JetProperty) property).hasDelegateExpressionOrInitializer();
|
hasDelegateOrInitializer = ((JetProperty) property).hasDelegateExpressionOrInitializer();
|
||||||
}
|
}
|
||||||
else if (property instanceof JetParameter) {
|
|
||||||
hasCorrespondingValueParameter = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyGetterDescriptor getter = propertyDescriptor.getGetter();
|
PropertyGetterDescriptor getter = propertyDescriptor.getGetter();
|
||||||
PropertySetterDescriptor setter = propertyDescriptor.getSetter();
|
PropertySetterDescriptor setter = propertyDescriptor.getSetter();
|
||||||
@@ -353,17 +378,8 @@ public class DeclarationsChecker {
|
|||||||
customGetterOrSetter |= setter.hasBody();
|
customGetterOrSetter |= setter.hasBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean returnTypeIsNullable = true;
|
if (!hasBackingField || hasDelegateOrInitializer || customGetterOrSetter
|
||||||
boolean returnTypeIsPrimitive = true;
|
|| returnTypeIsPrimitive || propertyDescriptor.getExtensionReceiverParameter() != null) {
|
||||||
|
|
||||||
JetType returnType = propertyDescriptor.getReturnType();
|
|
||||||
if (returnType != null) {
|
|
||||||
returnTypeIsNullable = TypeUtils.isNullableType(returnType);
|
|
||||||
returnTypeIsPrimitive = KotlinBuiltIns.isPrimitiveType(returnType);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasBackingField || hasCorrespondingValueParameter || hasDelegateOrInitializer || customGetterOrSetter
|
|
||||||
|| returnTypeIsNullable || returnTypeIsPrimitive || propertyDescriptor.getExtensionReceiverParameter() != null) {
|
|
||||||
trace.report(INAPPLICABLE_LATEINIT_MODIFIER.on(modifier));
|
trace.report(INAPPLICABLE_LATEINIT_MODIFIER.on(modifier));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
class A {
|
|
||||||
public lateinit val str: String
|
|
||||||
|
|
||||||
init {
|
|
||||||
str = "OK"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun box(): String {
|
|
||||||
val a = A()
|
|
||||||
return a.str
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
class A {
|
|
||||||
private lateinit val str: String
|
|
||||||
|
|
||||||
init {
|
|
||||||
str = "OK"
|
|
||||||
}
|
|
||||||
|
|
||||||
public fun getMyStr(): String {
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun box(): String {
|
|
||||||
val a = A()
|
|
||||||
return a.getMyStr()
|
|
||||||
}
|
|
||||||
+17
-17
@@ -2,13 +2,13 @@ class CustomDelegate {
|
|||||||
public fun get(thisRef: Any?, prop: PropertyMetadata): String = prop.name
|
public fun get(thisRef: Any?, prop: PropertyMetadata): String = prop.name
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val p2: String) {
|
public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER_PRIMARY_CONSTRUCTOR_PARAMETER!>lateinit<!> var p2: String) {
|
||||||
|
|
||||||
public lateinit val a: String
|
public <!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val a: String
|
||||||
lateinit val b: T
|
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val b: T
|
||||||
private lateinit var c: CharSequence
|
private lateinit var c: CharSequence
|
||||||
|
|
||||||
lateinit val d: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val d: String
|
||||||
get
|
get
|
||||||
|
|
||||||
public lateinit var e: String
|
public lateinit var e: String
|
||||||
@@ -16,42 +16,42 @@ public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER!>la
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
fun a() {
|
fun a() {
|
||||||
<!WRONG_MODIFIER_TARGET!>lateinit<!> val <!UNUSED_VARIABLE!>a<!>: String
|
<!WRONG_MODIFIER_TARGET!>lateinit<!> var <!UNUSED_VARIABLE!>a<!>: String
|
||||||
}
|
}
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e1: V
|
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e1: V
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e2: String?
|
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e2: String?
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e3: Int
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e3: Int
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e4: Int?
|
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e4: Int?
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e5 = "A"
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e5 = "A"
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e6 = 3
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e6 = 3
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e7 by CustomDelegate()
|
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val e7 by CustomDelegate()
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e8: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val e8: String
|
||||||
get() = "A"
|
get() = "A"
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e9: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e9: String
|
||||||
set(v) { field = v }
|
set(v) { field = v }
|
||||||
|
|
||||||
abstract <!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val e10: String
|
abstract <!INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY!>lateinit<!> var e10: String
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val String.e11: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var String.e11: String
|
||||||
|
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var String.e12: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var String.e12: String
|
||||||
}
|
}
|
||||||
|
|
||||||
<!WRONG_MODIFIER_TARGET!>lateinit<!> val topLevel: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE, WRONG_MODIFIER_TARGET!>lateinit<!> val topLevel: String
|
||||||
<!WRONG_MODIFIER_TARGET!>lateinit<!> var topLevelMutable: String
|
<!WRONG_MODIFIER_TARGET!>lateinit<!> var topLevelMutable: String
|
||||||
|
|
||||||
public interface Intf {
|
public interface Intf {
|
||||||
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val str: String
|
<!INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY!>lateinit<!> var str: String
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class AbstractClass {
|
public abstract class AbstractClass {
|
||||||
abstract val str: String
|
abstract var str: String
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AbstractClassImpl : AbstractClass() {
|
public class AbstractClassImpl : AbstractClass() {
|
||||||
override lateinit val str: String
|
override lateinit var str: String
|
||||||
}
|
}
|
||||||
+10
-10
@@ -10,18 +10,18 @@ public abstract class A</*0*/ T : kotlin.Any, /*1*/ V : kotlin.String?> {
|
|||||||
private final lateinit var c: kotlin.CharSequence
|
private final lateinit var c: kotlin.CharSequence
|
||||||
public final lateinit val d: kotlin.String
|
public final lateinit val d: kotlin.String
|
||||||
public final lateinit var e: kotlin.String
|
public final lateinit var e: kotlin.String
|
||||||
public final lateinit val e1: V
|
public final lateinit var e1: V
|
||||||
public abstract lateinit val e10: kotlin.String
|
public abstract lateinit var e10: kotlin.String
|
||||||
public final lateinit val e2: kotlin.String?
|
public final lateinit var e2: kotlin.String?
|
||||||
public final lateinit val e3: kotlin.Int
|
public final lateinit var e3: kotlin.Int
|
||||||
public final lateinit val e4: kotlin.Int?
|
public final lateinit var e4: kotlin.Int?
|
||||||
public final lateinit var e5: kotlin.String
|
public final lateinit var e5: kotlin.String
|
||||||
public final lateinit var e6: kotlin.Int
|
public final lateinit var e6: kotlin.Int
|
||||||
public final lateinit val e7: kotlin.String
|
public final lateinit val e7: kotlin.String
|
||||||
public final lateinit val e8: kotlin.String
|
public final lateinit val e8: kotlin.String
|
||||||
public final lateinit var e9: kotlin.String
|
public final lateinit var e9: kotlin.String
|
||||||
public final val p2: kotlin.String
|
public final var p2: kotlin.String
|
||||||
public final lateinit val kotlin.String.e11: kotlin.String
|
public final lateinit var kotlin.String.e11: kotlin.String
|
||||||
public final lateinit var kotlin.String.e12: kotlin.String
|
public final lateinit var kotlin.String.e12: kotlin.String
|
||||||
public final fun a(): kotlin.Unit
|
public final fun a(): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
@@ -31,7 +31,7 @@ public abstract class A</*0*/ T : kotlin.Any, /*1*/ V : kotlin.String?> {
|
|||||||
|
|
||||||
public abstract class AbstractClass {
|
public abstract class AbstractClass {
|
||||||
public constructor AbstractClass()
|
public constructor AbstractClass()
|
||||||
public abstract val str: kotlin.String
|
public abstract var str: kotlin.String
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
@@ -39,7 +39,7 @@ public abstract class AbstractClass {
|
|||||||
|
|
||||||
public final class AbstractClassImpl : AbstractClass {
|
public final class AbstractClassImpl : AbstractClass {
|
||||||
public constructor AbstractClassImpl()
|
public constructor AbstractClassImpl()
|
||||||
public open override /*1*/ lateinit val str: kotlin.String
|
public open override /*1*/ lateinit var str: kotlin.String
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
@@ -54,7 +54,7 @@ public final class CustomDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface Intf {
|
public interface Intf {
|
||||||
public abstract lateinit val str: kotlin.String
|
public abstract lateinit var str: kotlin.String
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|||||||
-12
@@ -6603,18 +6603,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("simple.kt")
|
|
||||||
public void testSimple() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/simple.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("simpleField.kt")
|
|
||||||
public void testSimpleField() throws Exception {
|
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/simpleField.kt");
|
|
||||||
doTest(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TestMetadata("simpleVar.kt")
|
@TestMetadata("simpleVar.kt")
|
||||||
public void testSimpleVar() throws Exception {
|
public void testSimpleVar() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/simpleVar.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/properties/lateinit/simpleVar.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user