Report more specific error on primitive type property (KT-9358)

This commit is contained in:
Yan Zhulanow
2015-09-29 20:17:10 +03:00
parent e6c0d4692a
commit aa573c2e31
4 changed files with 10 additions and 3 deletions
@@ -352,6 +352,7 @@ public interface Errors {
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);
DiagnosticFactory0<PsiElement> INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE = DiagnosticFactory0.create(ERROR);
DiagnosticFactory2<JetModifierListOwner, String, ClassDescriptor> ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS = DiagnosticFactory2.create(ERROR, ABSTRACT_MODIFIER);
@@ -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");
@@ -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));
}
}
+2 -2
View File
@@ -21,10 +21,10 @@ public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER_PRI
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e1: V
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e2: String?
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e3: Int
<!INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE!>lateinit<!> var e3: Int
<!INAPPLICABLE_LATEINIT_MODIFIER_NULLABLE!>lateinit<!> var e4: Int?
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e5 = "A"
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> var e6 = 3
<!INAPPLICABLE_LATEINIT_MODIFIER_PRIMITIVE!>lateinit<!> var e6 = 3
<!INAPPLICABLE_LATEINIT_MODIFIER_IMMUTABLE!>lateinit<!> val e7 by CustomDelegate()