Support preference of TYPE_USE annotations to enhance over others like METHOD, FIELD and VALUE_PARAMETER to avoid double applying them in case of arrays: @NotNull Integer [] (both to the array element and to the entire array)

^KT-24392 Fixed
This commit is contained in:
Victor Petukhov
2020-12-08 18:32:33 +03:00
parent 69f31afecc
commit 857cc92326
8 changed files with 83 additions and 47 deletions
@@ -5,6 +5,11 @@
package org.jetbrains.kotlin.load.java
enum class AnnotationQualifierApplicabilityType {
METHOD_RETURN_TYPE, VALUE_PARAMETER, FIELD, TYPE_USE, TYPE_PARAMETER_BOUNDS
enum class AnnotationQualifierApplicabilityType(val javaTarget: String) {
METHOD_RETURN_TYPE("METHOD"),
VALUE_PARAMETER("PARAMETER"),
FIELD("FIELD"),
TYPE_USE("TYPE_USE"),
TYPE_PARAMETER_BOUNDS("TYPE_USE"),
TYPE_PARAMETER("TYPE_PARAMETER")
}
@@ -16,10 +16,15 @@
package org.jetbrains.kotlin.load.java;
import kotlin.annotation.Repeatable;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.jvm.JvmClassName;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@SuppressWarnings("PointlessBitwiseExpression")
public final class JvmAnnotationNames {
public static final FqName METADATA_FQ_NAME = new FqName("kotlin.Metadata");
@@ -44,6 +49,12 @@ public final class JvmAnnotationNames {
public static final Name DEFAULT_ANNOTATION_MEMBER_NAME = Name.identifier("value");
public static final FqName TARGET_ANNOTATION = new FqName(Target.class.getCanonicalName());
public static final FqName RETENTION_ANNOTATION = new FqName(Retention.class.getCanonicalName());
public static final FqName DEPRECATED_ANNOTATION = new FqName(Deprecated.class.getCanonicalName());
public static final FqName DOCUMENTED_ANNOTATION = new FqName(Documented.class.getCanonicalName());
public static final FqName REPEATABLE_ANNOTATION = new FqName("java.lang.annotation.Repeatable");
public static final FqName JETBRAINS_NOT_NULL_ANNOTATION = new FqName("org.jetbrains.annotations.NotNull");
public static final FqName JETBRAINS_NULLABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Nullable");
public static final FqName JETBRAINS_MUTABLE_ANNOTATION = new FqName("org.jetbrains.annotations.Mutable");