Change error message for nullable annotation member
This commit is contained in:
@@ -115,6 +115,7 @@ public interface Errors {
|
||||
DiagnosticFactory1<JetAnnotationEntry, String> NOT_AN_ANNOTATION_CLASS = DiagnosticFactory1.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> ANNOTATION_CLASS_WITH_BODY = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetTypeReference> INVALID_TYPE_OF_ANNOTATION_MEMBER = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetTypeReference> NULLABLE_TYPE_OF_ANNOTATION_MEMBER = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
// Classes and traits
|
||||
|
||||
|
||||
+1
@@ -435,6 +435,7 @@ public class DefaultErrorMessages {
|
||||
MAP.put(NOT_AN_ANNOTATION_CLASS, "''{0}'' is not an annotation class", TO_STRING);
|
||||
MAP.put(ANNOTATION_CLASS_WITH_BODY, "Body is not allowed for annotation class");
|
||||
MAP.put(INVALID_TYPE_OF_ANNOTATION_MEMBER, "Invalid type of annotation member");
|
||||
MAP.put(NULLABLE_TYPE_OF_ANNOTATION_MEMBER, "An annotation parameter cannot be nullable");
|
||||
|
||||
MAP.put(DEFAULT_VALUE_NOT_ALLOWED_IN_OVERRIDE, "An overriding function is not allowed to specify default values for its parameters");
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.INVALID_TYPE_OF_ANNOTATION_MEMBER;
|
||||
import static org.jetbrains.jet.lang.diagnostics.Errors.NULLABLE_TYPE_OF_ANNOTATION_MEMBER;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.VALUE_PARAMETER;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isAnnotationClass;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumClass;
|
||||
@@ -42,9 +43,12 @@ public class AnnotationUtils {
|
||||
VariableDescriptor parameterDescriptor = trace.getBindingContext().get(VALUE_PARAMETER, parameter);
|
||||
if (parameterDescriptor == null) continue;
|
||||
JetType parameterType = parameterDescriptor.getType();
|
||||
if (!isAcceptableTypeForAnnotationParameter(parameterType)) {
|
||||
JetTypeReference typeReference = parameter.getTypeReference();
|
||||
if (typeReference != null) {
|
||||
JetTypeReference typeReference = parameter.getTypeReference();
|
||||
if (typeReference != null) {
|
||||
if (parameterType.isNullable()) {
|
||||
trace.report(NULLABLE_TYPE_OF_ANNOTATION_MEMBER.on(typeReference));
|
||||
}
|
||||
else if (!isAcceptableTypeForAnnotationParameter(parameterType)) {
|
||||
trace.report(INVALID_TYPE_OF_ANNOTATION_MEMBER.on(typeReference));
|
||||
}
|
||||
}
|
||||
@@ -52,9 +56,6 @@ public class AnnotationUtils {
|
||||
}
|
||||
|
||||
private static boolean isAcceptableTypeForAnnotationParameter(@NotNull JetType parameterType) {
|
||||
if (parameterType.isNullable()) {
|
||||
return false;
|
||||
}
|
||||
ClassDescriptor typeDescriptor = TypeUtils.getClassDescriptor(parameterType);
|
||||
if (typeDescriptor == null) {
|
||||
return false;
|
||||
|
||||
+13
-13
@@ -40,19 +40,19 @@ annotation class Ann9(vararg val p1: String,
|
||||
vararg val p5: Int)
|
||||
|
||||
// INCORRECT
|
||||
annotation class InAnn1(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Int?<!>,
|
||||
val p3: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Short?<!>,
|
||||
val p4: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Long?<!>,
|
||||
val p5: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Double?<!>,
|
||||
val p6: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Float?<!>,
|
||||
val p7: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Char?<!>,
|
||||
val p8: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Boolean?<!>)
|
||||
annotation class InAnn1(val p1: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Int?<!>,
|
||||
val p3: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Short?<!>,
|
||||
val p4: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Long?<!>,
|
||||
val p5: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Double?<!>,
|
||||
val p6: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Float?<!>,
|
||||
val p7: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Char?<!>,
|
||||
val p8: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Boolean?<!>)
|
||||
|
||||
annotation class InAnn4(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<Int><!>,
|
||||
val p2: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<Int>?<!>)
|
||||
val p2: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Array<Int>?<!>)
|
||||
|
||||
annotation class InAnn6(val p: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Class<*>?<!>)
|
||||
annotation class InAnn7(val p: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>RetentionPolicy?<!>)
|
||||
annotation class InAnn6(val p: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Class<*>?<!>)
|
||||
annotation class InAnn7(val p: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>RetentionPolicy?<!>)
|
||||
annotation class InAnn8(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<Int><!>,
|
||||
val p2: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<Int?><!>,
|
||||
val p3: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<MyClass><!>,
|
||||
@@ -60,9 +60,9 @@ annotation class InAnn8(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Array<Int><
|
||||
|
||||
annotation class InAnn9(val p: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>MyClass<!>)
|
||||
|
||||
annotation class InAnn10(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>String?<!>)
|
||||
annotation class InAnn11(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>Ann1?<!>)
|
||||
annotation class InAnn12(val p1: <!INVALID_TYPE_OF_ANNOTATION_MEMBER!>MyEnum?<!>)
|
||||
annotation class InAnn10(val p1: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>String?<!>)
|
||||
annotation class InAnn11(val p1: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>Ann1?<!>)
|
||||
annotation class InAnn12(val p1: <!NULLABLE_TYPE_OF_ANNOTATION_MEMBER!>MyEnum?<!>)
|
||||
|
||||
|
||||
enum class MyEnum {
|
||||
|
||||
Reference in New Issue
Block a user