Change error message for nullable annotation member

This commit is contained in:
Natalia.Ukhorskaya
2013-07-24 16:09:42 +04:00
parent 5a5eefece8
commit 73000ec407
4 changed files with 22 additions and 19 deletions
@@ -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
@@ -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;
@@ -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 {