diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 62845be3092..f6f1cd83fb6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -352,6 +352,7 @@ public interface Errors { DiagnosticFactory0 INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 INAPPLICABLE_LATEINIT_MODIFIER_PRIMARY_CONSTRUCTOR_PARAMETER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE = DiagnosticFactory0.create(ERROR); + DiagnosticFactory0 INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE = DiagnosticFactory0.create(ERROR); DiagnosticFactory2 ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS = DiagnosticFactory2.create(ERROR, ABSTRACT_MODIFIER); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index b30c8a763ed..3d0d2abafc8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -218,6 +218,7 @@ public class DefaultErrorMessages { 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(INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE, "''lateinit'' modifier is not allowed on primitive type properties"); MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility"); MAP.put(BACKING_FIELD_IN_TRAIT, "Property in an interface cannot have a backing field"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java index b1befeaf92f..7860a5cd4c6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java @@ -432,6 +432,11 @@ public class DeclarationsChecker { return; } + if (returnTypeIsPrimitive) { + trace.report(INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE.on(modifier)); + return; + } + if (propertyDescriptor.getModality() == Modality.ABSTRACT) { trace.report(INAPPLICABLE_LATEINIT_MODIFIER_ABSTRACT_PROPERTY.on(modifier)); return; @@ -463,7 +468,7 @@ public class DeclarationsChecker { } if (!hasBackingField || hasDelegateOrInitializer || customGetterOrSetter - || returnTypeIsPrimitive || propertyDescriptor.getExtensionReceiverParameter() != null) { + || propertyDescriptor.getExtensionReceiverParameter() != null) { trace.report(INAPPLICABLE_LATEINIT_MODIFIER.on(modifier)); } } diff --git a/compiler/testData/diagnostics/tests/LateInit.kt b/compiler/testData/diagnostics/tests/LateInit.kt index 3fc440177ae..cda6ec9a34b 100644 --- a/compiler/testData/diagnostics/tests/LateInit.kt +++ b/compiler/testData/diagnostics/tests/LateInit.kt @@ -21,10 +21,10 @@ public abstract class A(lateinit var e1: V lateinit var e2: String? - lateinit var e3: Int + lateinit var e3: Int lateinit var e4: Int? lateinit var e5 = "A" - lateinit var e6 = 3 + lateinit var e6 = 3 lateinit val e7 by CustomDelegate()