Check repeatable annotation container parameters, retention, target

#KT-12794
 #KT-47928
This commit is contained in:
Alexander Udalov
2021-07-28 01:10:43 +02:00
parent 0a6d010d1c
commit e20b354dbd
28 changed files with 1362 additions and 5 deletions
@@ -2106,6 +2106,36 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerAndAnnotationAreBothApplied_1_6.kt");
}
@Test
@TestMetadata("containerArguments_1_5.kt")
public void testContainerArguments_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_5.kt");
}
@Test
@TestMetadata("containerArguments_1_6.kt")
public void testContainerArguments_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_6.kt");
}
@Test
@TestMetadata("containerRetention_1_5.kt")
public void testContainerRetention_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_5.kt");
}
@Test
@TestMetadata("containerRetention_1_6.kt")
public void testContainerRetention_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_6.kt");
}
@Test
@TestMetadata("containerTarget_1_6.kt")
public void testContainerTarget_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerTarget_1_6.kt");
}
@Test
@TestMetadata("javaRepeatableJvmTarget6.kt")
public void testJavaRepeatableJvmTarget6() throws Exception {
@@ -2106,6 +2106,36 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerAndAnnotationAreBothApplied_1_6.kt");
}
@Test
@TestMetadata("containerArguments_1_5.kt")
public void testContainerArguments_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_5.kt");
}
@Test
@TestMetadata("containerArguments_1_6.kt")
public void testContainerArguments_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_6.kt");
}
@Test
@TestMetadata("containerRetention_1_5.kt")
public void testContainerRetention_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_5.kt");
}
@Test
@TestMetadata("containerRetention_1_6.kt")
public void testContainerRetention_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_6.kt");
}
@Test
@TestMetadata("containerTarget_1_6.kt")
public void testContainerTarget_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerTarget_1_6.kt");
}
@Test
@TestMetadata("javaRepeatableJvmTarget6.kt")
public void testJavaRepeatableJvmTarget6() throws Exception {
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.resolve.jvm.checkers
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.resolve.AdditionalAnnotationChecker
import org.jetbrains.kotlin.resolve.BindingContext
@@ -21,6 +22,7 @@ object ExplicitMetadataChecker : AdditionalAnnotationChecker {
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
) {
for (entry in entries) {
@@ -41,6 +41,7 @@ object FileClassAnnotationsChecker : AdditionalAnnotationChecker {
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
) {
val fileAnnotationsToCheck = arrayListOf<Pair<KtAnnotationEntry, ClassDescriptor>>()
@@ -5,37 +5,48 @@
package org.jetbrains.kotlin.resolve.jvm.checkers
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.resolve.AdditionalAnnotationChecker
import org.jetbrains.kotlin.resolve.AnnotationChecker
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.constants.KClassValue
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.getAnnotationRetention
import org.jetbrains.kotlin.resolve.descriptorUtil.isAnnotatedWithKotlinRepeatable
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformAnnotationFeaturesSupport
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.types.TypeUtils
class RepeatableAnnotationChecker(
languageVersionSettings: LanguageVersionSettings,
private val languageVersionSettings: LanguageVersionSettings,
private val jvmTarget: JvmTarget,
private val platformAnnotationFeaturesSupport: JvmPlatformAnnotationFeaturesSupport,
private val module: ModuleDescriptor,
) : AdditionalAnnotationChecker {
override fun checkEntries(
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
) {
if (entries.isEmpty()) return
@@ -49,6 +60,20 @@ class RepeatableAnnotationChecker(
}
checkRepeatedEntries(annotations, trace)
if (annotated is KtClassOrObject && annotated.hasModifier(KtTokens.ANNOTATION_KEYWORD)) {
val annotationClass = trace.get(BindingContext.CLASS, annotated)
val repeatable = annotations.find { it.descriptor.fqName == JvmAnnotationNames.REPEATABLE_ANNOTATION }
if (annotationClass != null && repeatable != null) {
val containerKClassValue = repeatable.descriptor.allValueArguments[Name.identifier("value")]
if (containerKClassValue is KClassValue) {
val containerClass = TypeUtils.getClassDescriptor(containerKClassValue.getArgumentType(module))
if (containerClass != null) {
checkRepeatableAnnotationContainer(annotationClass, containerClass, trace, repeatable.entry)
}
}
}
}
}
private fun checkRepeatedEntries(annotations: List<ResolvedAnnotation>, trace: BindingTrace) {
@@ -88,6 +113,97 @@ class RepeatableAnnotationChecker(
}
}
private fun checkRepeatableAnnotationContainer(
annotationClass: ClassDescriptor,
containerClass: ClassDescriptor,
trace: BindingTrace,
reportOn: KtAnnotationEntry,
) {
checkContainerParameters(containerClass, annotationClass, reportOn)?.let(trace::report)
checkContainerRetention(containerClass, annotationClass, reportOn)?.let(trace::report)
checkContainerTarget(containerClass, annotationClass, reportOn)?.let(trace::report)
}
private fun checkContainerParameters(
containerClass: ClassDescriptor,
annotationClass: ClassDescriptor,
reportOn: KtAnnotationEntry,
): Diagnostic? {
val containerCtor = containerClass.unsubstitutedPrimaryConstructor ?: return null
val value = containerCtor.valueParameters.find { it.name.asString() == "value" }
if (value == null || !KotlinBuiltIns.isArray(value.type) ||
value.type.arguments.single().type.constructor.declarationDescriptor != annotationClass
) {
return select(
ErrorsJvm.REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY, ErrorsJvm.REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR
).on(reportOn, containerClass.fqNameSafe, annotationClass.fqNameSafe)
}
val otherNonDefault = containerCtor.valueParameters.find { it.name.asString() != "value" && !it.declaresDefaultValue() }
if (otherNonDefault != null) {
return select(
ErrorsJvm.REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER, ErrorsJvm.REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER_ERROR
).on(reportOn, containerClass.fqNameSafe, otherNonDefault)
}
return null
}
private fun checkContainerRetention(
containerClass: ClassDescriptor,
annotationClass: ClassDescriptor,
reportOn: KtAnnotationEntry,
): Diagnostic? {
val annotationRetention = annotationClass.getAnnotationRetention() ?: KotlinRetention.RUNTIME
val containerRetention = containerClass.getAnnotationRetention() ?: KotlinRetention.RUNTIME
if (containerRetention > annotationRetention) {
return select(
ErrorsJvm.REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION, ErrorsJvm.REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR
).on(reportOn, containerClass.fqNameSafe, containerRetention.name, annotationClass.fqNameSafe, annotationRetention.name)
}
return null
}
private fun checkContainerTarget(
containerClass: ClassDescriptor,
annotationClass: ClassDescriptor,
reportOn: KtAnnotationEntry,
): Diagnostic? {
val annotationTargets = AnnotationChecker.applicableTargetSet(annotationClass) ?: KotlinTarget.DEFAULT_TARGET_SET
val containerTargets = AnnotationChecker.applicableTargetSet(containerClass) ?: KotlinTarget.DEFAULT_TARGET_SET
// See https://docs.oracle.com/javase/specs/jls/se16/html/jls-9.html#jls-9.6.3.
// (TBH, the rules about TYPE/TYPE_USE and TYPE_PARAMETER/TYPE_USE don't seem to make a lot of sense, but it's JLS
// so we better obey it for full interop with the Java language and reflection.)
for (target in containerTargets) {
val ok = when (target) {
in annotationTargets -> true
KotlinTarget.ANNOTATION_CLASS ->
KotlinTarget.CLASS in annotationTargets ||
KotlinTarget.TYPE in annotationTargets
KotlinTarget.CLASS ->
KotlinTarget.TYPE in annotationTargets
KotlinTarget.TYPE_PARAMETER ->
KotlinTarget.TYPE in annotationTargets
else -> false
}
if (!ok) {
return select(
ErrorsJvm.REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET, ErrorsJvm.REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR
).on(reportOn, containerClass.fqNameSafe, annotationClass.fqNameSafe)
}
}
return null
}
private fun <D> select(warning: D, error: D): D =
if (languageVersionSettings.supportsFeature(LanguageFeature.RepeatableAnnotationContainerConstraints))
error
else
warning
private fun isRepeatableAnnotation(classDescriptor: ClassDescriptor): Boolean =
classDescriptor.isAnnotatedWithKotlinRepeatable() || platformAnnotationFeaturesSupport.isRepeatableAnnotationClass(classDescriptor)
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.utils.StringsKt;
import java.util.List;
import static kotlin.collections.CollectionsKt.*;
import static org.jetbrains.kotlin.diagnostics.Errors.UPPER_BOUND_VIOLATED_IN_TYPEALIAS_EXPANSION;
import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.*;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.*;
@@ -76,6 +75,15 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
MAP.put(REPEATED_ANNOTATION_WITH_CONTAINER, "Repeated annotation ''@{0}'' cannot be used on a declaration which is annotated with its container annotation ''@{1}''", TO_STRING, TO_STRING);
MAP.put(ANNOTATION_IS_NOT_APPLICABLE_TO_MULTIFILE_CLASSES, "Annotation ''@{0}'' is not applicable to the multi-file classes", TO_STRING);
MAP.put(REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY, "Container annotation ''{0}'' must have a property ''value'' of type ''Array<{1}>''. This code will be prohibited in Kotlin 1.6", TO_STRING, TO_STRING);
MAP.put(REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR, "Container annotation ''{0}'' must have a property ''value'' of type ''Array<{1}>''", TO_STRING, TO_STRING);
MAP.put(REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER, "Container annotation ''{0}'' does not have a default value for ''{1}''. This code will be prohibited in Kotlin 1.6", TO_STRING, NAME);
MAP.put(REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER_ERROR, "Container annotation ''{0}'' does not have a default value for ''{1}''", TO_STRING, NAME);
MAP.put(REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION, "Container annotation ''{0}'' has shorter retention (''{1}'') than the repeatable annotation ''{2}'' (''{3}''). This code will be prohibited in Kotlin 1.6", TO_STRING, TO_STRING, TO_STRING, TO_STRING);
MAP.put(REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR, "Container annotation ''{0}'' has shorter retention (''{1}'') than the repeatable annotation ''{2}'' (''{3}'')", TO_STRING, TO_STRING, TO_STRING, TO_STRING);
MAP.put(REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET, "Target set of container annotation ''{0}'' must be a subset of the target set of contained annotation ''{1}''. This code will be prohibited in Kotlin 1.6", TO_STRING, TO_STRING);
MAP.put(REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR, "Target set of container annotation ''{0}'' must be a subset of the target set of contained annotation ''{1}''", TO_STRING, TO_STRING);
MAP.put(JVM_PACKAGE_NAME_CANNOT_BE_EMPTY, "''@JvmPackageName'' annotation value cannot be empty");
MAP.put(JVM_PACKAGE_NAME_MUST_BE_VALID_NAME, "''@JvmPackageName'' annotation value must be a valid dot-qualified name of a package");
MAP.put(JVM_PACKAGE_NAME_NOT_SUPPORTED_IN_FILES_WITH_CLASSES, "''@JvmPackageName'' annotation is not supported for files with class declarations");
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.kotlin.descriptors.CallableDescriptor;
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.Named;
import org.jetbrains.kotlin.diagnostics.*;
import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.name.Name;
@@ -69,9 +70,20 @@ public interface ErrorsJvm {
DiagnosticFactory0<KtExpression> POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION = DiagnosticFactory0.create(ERROR);
DiagnosticFactory1<KtAnnotationEntry, FqName> DEPRECATED_JAVA_ANNOTATION = DiagnosticFactory1.create(WARNING);
DiagnosticFactory0<KtAnnotationEntry> NON_SOURCE_REPEATED_ANNOTATION = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> REPEATED_ANNOTATION_TARGET6 = DiagnosticFactory0.create(ERROR);
DiagnosticFactory2<KtAnnotationEntry, FqName, FqName> REPEATED_ANNOTATION_WITH_CONTAINER = DiagnosticFactory2.create(ERROR);
DiagnosticFactory2<KtAnnotationEntry, FqName, FqName> REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<KtAnnotationEntry, FqName, FqName> REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR = DiagnosticFactory2.create(ERROR);
DiagnosticFactory2<KtAnnotationEntry, FqName, Named> REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<KtAnnotationEntry, FqName, Named> REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER_ERROR = DiagnosticFactory2.create(ERROR);
DiagnosticFactory4<KtAnnotationEntry, FqName, String, FqName, String> REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION = DiagnosticFactory4.create(WARNING);
DiagnosticFactory4<KtAnnotationEntry, FqName, String, FqName, String> REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR = DiagnosticFactory4.create(ERROR);
DiagnosticFactory2<KtAnnotationEntry, FqName, FqName> REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET = DiagnosticFactory2.create(WARNING);
DiagnosticFactory2<KtAnnotationEntry, FqName, FqName> REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR = DiagnosticFactory2.create(ERROR);
DiagnosticFactory1<KtAnnotationEntry, FqName> ANNOTATION_IS_NOT_APPLICABLE_TO_MULTIFILE_CLASSES = DiagnosticFactory1.create(ERROR);
DiagnosticFactory0<KtAnnotationEntry> JVM_PACKAGE_NAME_CANNOT_BE_EMPTY = DiagnosticFactory0.create(ERROR);
@@ -240,7 +240,7 @@ class AnnotationChecker(
}
for (checker in additionalCheckers) {
checker.checkEntries(entries, actualTargets.defaultTargets, trace, languageVersionSettings)
checker.checkEntries(entries, actualTargets.defaultTargets, trace, annotated, languageVersionSettings)
}
}
@@ -398,6 +398,7 @@ interface AdditionalAnnotationChecker {
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
)
}
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtPropertyAccessor
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.AdditionalAnnotationChecker
import org.jetbrains.kotlin.resolve.AnnotationChecker
import org.jetbrains.kotlin.resolve.BindingContext
@@ -40,6 +39,7 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
) {
var isAnnotatedWithExperimental = false
@@ -81,7 +81,6 @@ class ExperimentalMarkerDeclarationAnnotationChecker(private val module: ModuleD
) {
trace.report(Errors.EXPERIMENTAL_ANNOTATION_ON_WRONG_TARGET.on(entry, "field"))
}
val annotated = entry.getStrictParentOfType<KtAnnotated>() ?: continue
if (annotated is KtCallableDeclaration &&
annotated !is KtPropertyAccessor &&
annotationUseSiteTarget == null &&
@@ -0,0 +1,50 @@
// !LANGUAGE: -RepeatableAnnotations -RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
@R(C1::class)
annotation class A1
annotation class C1
@R(C2::class)
annotation class A2
annotation class C2(val value: A2)
@R(C3::class)
annotation class A3
annotation class C3(val value: Array<String>)
@R(C4::class)
annotation class A4
annotation class C4(val notValue: Array<A4>)
@R(C5::class)
annotation class A5
annotation class C5(val value: Array<A5>, val irrelevant: String)
@R(C6::class)
annotation class A6
annotation class C6(val irrelevant: Double, val value: Array<A6> = [])
// Should be an error after fixing KT-47932.
@R(A7::class)
annotation class A7(val value: Array<A7>)
@R(D1::class)
annotation class B1
annotation class D1(val value: Array<B1>)
@R(D2::class)
annotation class B2
annotation class D2(val value: Array<B2> = [])
@R(D3::class)
annotation class B3
annotation class D3(val value: Array<B3>, val other1: String = "", val other2: Int = 42)
@R(D4::class)
annotation class B4
annotation class D4(val value1: Array<B4> = [], val value: Array<B4>)
@@ -0,0 +1,50 @@
// !LANGUAGE: -RepeatableAnnotations -RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY!>@R(C1::class)<!>
annotation class A1
annotation class C1
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY!>@R(C2::class)<!>
annotation class A2
annotation class C2(val value: A2)
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY!>@R(C3::class)<!>
annotation class A3
annotation class C3(val value: Array<String>)
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY!>@R(C4::class)<!>
annotation class A4
annotation class C4(val notValue: Array<A4>)
<!REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER!>@R(C5::class)<!>
annotation class A5
annotation class C5(val value: Array<A5>, val irrelevant: String)
<!REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER!>@R(C6::class)<!>
annotation class A6
annotation class C6(val irrelevant: Double, val value: Array<A6> = [])
// Should be an error after fixing KT-47932.
@R(A7::class)
annotation class A7(val value: Array<A7>)
@R(D1::class)
annotation class B1
annotation class D1(val value: Array<B1>)
@R(D2::class)
annotation class B2
annotation class D2(val value: Array<B2> = [])
@R(D3::class)
annotation class B3
annotation class D3(val value: Array<B3>, val other1: String = "", val other2: Int = 42)
@R(D4::class)
annotation class B4
annotation class D4(val value1: Array<B4> = [], val value: Array<B4>)
@@ -0,0 +1,163 @@
package
@java.lang.annotation.Repeatable(value = C1::class) public final annotation class A1 : kotlin.Annotation {
public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C2::class) public final annotation class A2 : kotlin.Annotation {
public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C3::class) public final annotation class A3 : kotlin.Annotation {
public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C4::class) public final annotation class A4 : kotlin.Annotation {
public constructor A4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C5::class) public final annotation class A5 : kotlin.Annotation {
public constructor A5()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C6::class) public final annotation class A6 : kotlin.Annotation {
public constructor A6()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = A7::class) public final annotation class A7 : kotlin.Annotation {
public constructor A7(/*0*/ value: kotlin.Array<A7>)
public final val value: kotlin.Array<A7>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D1::class) public final annotation class B1 : kotlin.Annotation {
public constructor B1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D2::class) public final annotation class B2 : kotlin.Annotation {
public constructor B2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D3::class) public final annotation class B3 : kotlin.Annotation {
public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D4::class) public final annotation class B4 : kotlin.Annotation {
public constructor B4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C1 : kotlin.Annotation {
public constructor C1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C2 : kotlin.Annotation {
public constructor C2(/*0*/ value: A2)
public final val value: A2
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C3 : kotlin.Annotation {
public constructor C3(/*0*/ value: kotlin.Array<kotlin.String>)
public final val value: kotlin.Array<kotlin.String>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C4 : kotlin.Annotation {
public constructor C4(/*0*/ notValue: kotlin.Array<A4>)
public final val notValue: kotlin.Array<A4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C5 : kotlin.Annotation {
public constructor C5(/*0*/ value: kotlin.Array<A5>, /*1*/ irrelevant: kotlin.String)
public final val irrelevant: kotlin.String
public final val value: kotlin.Array<A5>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C6 : kotlin.Annotation {
public constructor C6(/*0*/ irrelevant: kotlin.Double, /*1*/ value: kotlin.Array<A6> = ...)
public final val irrelevant: kotlin.Double
public final val value: kotlin.Array<A6>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D1 : kotlin.Annotation {
public constructor D1(/*0*/ value: kotlin.Array<B1>)
public final val value: kotlin.Array<B1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D2 : kotlin.Annotation {
public constructor D2(/*0*/ value: kotlin.Array<B2> = ...)
public final val value: kotlin.Array<B2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D3 : kotlin.Annotation {
public constructor D3(/*0*/ value: kotlin.Array<B3>, /*1*/ other1: kotlin.String = ..., /*2*/ other2: kotlin.Int = ...)
public final val other1: kotlin.String
public final val other2: kotlin.Int
public final val value: kotlin.Array<B3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D4 : kotlin.Annotation {
public constructor D4(/*0*/ value1: kotlin.Array<B4> = ..., /*1*/ value: kotlin.Array<B4>)
public final val value: kotlin.Array<B4>
public final val value1: kotlin.Array<B4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,50 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
@R(C1::class)
annotation class A1
annotation class C1
@R(C2::class)
annotation class A2
annotation class C2(val value: A2)
@R(C3::class)
annotation class A3
annotation class C3(val value: Array<String>)
@R(C4::class)
annotation class A4
annotation class C4(val notValue: Array<A4>)
@R(C5::class)
annotation class A5
annotation class C5(val value: Array<A5>, val irrelevant: String)
@R(C6::class)
annotation class A6
annotation class C6(val irrelevant: Double, val value: Array<A6> = [])
// Should be an error after fixing KT-47932.
@R(A7::class)
annotation class A7(val value: Array<A7>)
@R(D1::class)
annotation class B1
annotation class D1(val value: Array<B1>)
@R(D2::class)
annotation class B2
annotation class D2(val value: Array<B2> = [])
@R(D3::class)
annotation class B3
annotation class D3(val value: Array<B3>, val other1: String = "", val other2: Int = 42)
@R(D4::class)
annotation class B4
annotation class D4(val value1: Array<B4> = [], val value: Array<B4>)
@@ -0,0 +1,50 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR!>@R(C1::class)<!>
annotation class A1
annotation class C1
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR!>@R(C2::class)<!>
annotation class A2
annotation class C2(val value: A2)
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR!>@R(C3::class)<!>
annotation class A3
annotation class C3(val value: Array<String>)
<!REPEATABLE_CONTAINER_MUST_HAVE_VALUE_ARRAY_ERROR!>@R(C4::class)<!>
annotation class A4
annotation class C4(val notValue: Array<A4>)
<!REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER_ERROR!>@R(C5::class)<!>
annotation class A5
annotation class C5(val value: Array<A5>, val irrelevant: String)
<!REPEATABLE_CONTAINER_HAS_NON_DEFAULT_PARAMETER_ERROR!>@R(C6::class)<!>
annotation class A6
annotation class C6(val irrelevant: Double, val value: Array<A6> = [])
// Should be an error after fixing KT-47932.
@R(A7::class)
annotation class A7(val value: Array<A7>)
@R(D1::class)
annotation class B1
annotation class D1(val value: Array<B1>)
@R(D2::class)
annotation class B2
annotation class D2(val value: Array<B2> = [])
@R(D3::class)
annotation class B3
annotation class D3(val value: Array<B3>, val other1: String = "", val other2: Int = 42)
@R(D4::class)
annotation class B4
annotation class D4(val value1: Array<B4> = [], val value: Array<B4>)
@@ -0,0 +1,163 @@
package
@java.lang.annotation.Repeatable(value = C1::class) public final annotation class A1 : kotlin.Annotation {
public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C2::class) public final annotation class A2 : kotlin.Annotation {
public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C3::class) public final annotation class A3 : kotlin.Annotation {
public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C4::class) public final annotation class A4 : kotlin.Annotation {
public constructor A4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C5::class) public final annotation class A5 : kotlin.Annotation {
public constructor A5()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C6::class) public final annotation class A6 : kotlin.Annotation {
public constructor A6()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = A7::class) public final annotation class A7 : kotlin.Annotation {
public constructor A7(/*0*/ value: kotlin.Array<A7>)
public final val value: kotlin.Array<A7>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D1::class) public final annotation class B1 : kotlin.Annotation {
public constructor B1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D2::class) public final annotation class B2 : kotlin.Annotation {
public constructor B2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D3::class) public final annotation class B3 : kotlin.Annotation {
public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D4::class) public final annotation class B4 : kotlin.Annotation {
public constructor B4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C1 : kotlin.Annotation {
public constructor C1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C2 : kotlin.Annotation {
public constructor C2(/*0*/ value: A2)
public final val value: A2
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C3 : kotlin.Annotation {
public constructor C3(/*0*/ value: kotlin.Array<kotlin.String>)
public final val value: kotlin.Array<kotlin.String>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C4 : kotlin.Annotation {
public constructor C4(/*0*/ notValue: kotlin.Array<A4>)
public final val notValue: kotlin.Array<A4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C5 : kotlin.Annotation {
public constructor C5(/*0*/ value: kotlin.Array<A5>, /*1*/ irrelevant: kotlin.String)
public final val irrelevant: kotlin.String
public final val value: kotlin.Array<A5>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C6 : kotlin.Annotation {
public constructor C6(/*0*/ irrelevant: kotlin.Double, /*1*/ value: kotlin.Array<A6> = ...)
public final val irrelevant: kotlin.Double
public final val value: kotlin.Array<A6>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D1 : kotlin.Annotation {
public constructor D1(/*0*/ value: kotlin.Array<B1>)
public final val value: kotlin.Array<B1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D2 : kotlin.Annotation {
public constructor D2(/*0*/ value: kotlin.Array<B2> = ...)
public final val value: kotlin.Array<B2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D3 : kotlin.Annotation {
public constructor D3(/*0*/ value: kotlin.Array<B3>, /*1*/ other1: kotlin.String = ..., /*2*/ other2: kotlin.Int = ...)
public final val other1: kotlin.String
public final val other2: kotlin.Int
public final val value: kotlin.Array<B3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D4 : kotlin.Annotation {
public constructor D4(/*0*/ value1: kotlin.Array<B4> = ..., /*1*/ value: kotlin.Array<B4>)
public final val value: kotlin.Array<B4>
public final val value1: kotlin.Array<B4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,40 @@
// !LANGUAGE: -RepeatableAnnotations -RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationRetention.*
@R(C1::class)
@Retention(RUNTIME)
annotation class A1
@Retention(BINARY)
annotation class C1(val value: Array<A1>)
@R(C2::class)
@Retention(BINARY)
annotation class A2
@Retention(SOURCE)
annotation class C2(val value: Array<A2>)
@R(C3::class)
annotation class A3
@Retention(SOURCE)
annotation class C3(val value: Array<A3>)
@R(D1::class)
annotation class B1
@Retention(RUNTIME)
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Retention(SOURCE)
annotation class B2
@Retention(BINARY)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Retention(BINARY)
annotation class B3
annotation class D3(val value: Array<B3>)
@@ -0,0 +1,40 @@
// !LANGUAGE: -RepeatableAnnotations -RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationRetention.*
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION!>@R(C1::class)<!>
@Retention(RUNTIME)
annotation class A1
@Retention(BINARY)
annotation class C1(val value: Array<A1>)
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION!>@R(C2::class)<!>
@Retention(BINARY)
annotation class A2
@Retention(SOURCE)
annotation class C2(val value: Array<A2>)
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION!>@R(C3::class)<!>
annotation class A3
@Retention(SOURCE)
annotation class C3(val value: Array<A3>)
@R(D1::class)
annotation class B1
@Retention(RUNTIME)
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Retention(SOURCE)
annotation class B2
@Retention(BINARY)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Retention(BINARY)
annotation class B3
annotation class D3(val value: Array<B3>)
@@ -0,0 +1,91 @@
package
@java.lang.annotation.Repeatable(value = C1::class) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class A1 : kotlin.Annotation {
public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C2::class) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class A2 : kotlin.Annotation {
public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C3::class) public final annotation class A3 : kotlin.Annotation {
public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D1::class) public final annotation class B1 : kotlin.Annotation {
public constructor B1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D2::class) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class B2 : kotlin.Annotation {
public constructor B2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D3::class) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class B3 : kotlin.Annotation {
public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class C1 : kotlin.Annotation {
public constructor C1(/*0*/ value: kotlin.Array<A1>)
public final val value: kotlin.Array<A1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class C2 : kotlin.Annotation {
public constructor C2(/*0*/ value: kotlin.Array<A2>)
public final val value: kotlin.Array<A2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class C3 : kotlin.Annotation {
public constructor C3(/*0*/ value: kotlin.Array<A3>)
public final val value: kotlin.Array<A3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class D1 : kotlin.Annotation {
public constructor D1(/*0*/ value: kotlin.Array<B1>)
public final val value: kotlin.Array<B1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class D2 : kotlin.Annotation {
public constructor D2(/*0*/ value: kotlin.Array<B2>)
public final val value: kotlin.Array<B2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D3 : kotlin.Annotation {
public constructor D3(/*0*/ value: kotlin.Array<B3>)
public final val value: kotlin.Array<B3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,40 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationRetention.*
@R(C1::class)
@Retention(RUNTIME)
annotation class A1
@Retention(BINARY)
annotation class C1(val value: Array<A1>)
@R(C2::class)
@Retention(BINARY)
annotation class A2
@Retention(SOURCE)
annotation class C2(val value: Array<A2>)
@R(C3::class)
annotation class A3
@Retention(SOURCE)
annotation class C3(val value: Array<A3>)
@R(D1::class)
annotation class B1
@Retention(RUNTIME)
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Retention(SOURCE)
annotation class B2
@Retention(BINARY)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Retention(BINARY)
annotation class B3
annotation class D3(val value: Array<B3>)
@@ -0,0 +1,40 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationRetention.*
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR!>@R(C1::class)<!>
@Retention(RUNTIME)
annotation class A1
@Retention(BINARY)
annotation class C1(val value: Array<A1>)
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR!>@R(C2::class)<!>
@Retention(BINARY)
annotation class A2
@Retention(SOURCE)
annotation class C2(val value: Array<A2>)
<!REPEATABLE_CONTAINER_HAS_SHORTER_RETENTION_ERROR!>@R(C3::class)<!>
annotation class A3
@Retention(SOURCE)
annotation class C3(val value: Array<A3>)
@R(D1::class)
annotation class B1
@Retention(RUNTIME)
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Retention(SOURCE)
annotation class B2
@Retention(BINARY)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Retention(BINARY)
annotation class B3
annotation class D3(val value: Array<B3>)
@@ -0,0 +1,91 @@
package
@java.lang.annotation.Repeatable(value = C1::class) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class A1 : kotlin.Annotation {
public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C2::class) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class A2 : kotlin.Annotation {
public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C3::class) public final annotation class A3 : kotlin.Annotation {
public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D1::class) public final annotation class B1 : kotlin.Annotation {
public constructor B1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D2::class) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class B2 : kotlin.Annotation {
public constructor B2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D3::class) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class B3 : kotlin.Annotation {
public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class C1 : kotlin.Annotation {
public constructor C1(/*0*/ value: kotlin.Array<A1>)
public final val value: kotlin.Array<A1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class C2 : kotlin.Annotation {
public constructor C2(/*0*/ value: kotlin.Array<A2>)
public final val value: kotlin.Array<A2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class C3 : kotlin.Annotation {
public constructor C3(/*0*/ value: kotlin.Array<A3>)
public final val value: kotlin.Array<A3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class D1 : kotlin.Annotation {
public constructor D1(/*0*/ value: kotlin.Array<B1>)
public final val value: kotlin.Array<B1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class D2 : kotlin.Annotation {
public constructor D2(/*0*/ value: kotlin.Array<B2>)
public final val value: kotlin.Array<B2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class D3 : kotlin.Annotation {
public constructor D3(/*0*/ value: kotlin.Array<B3>)
public final val value: kotlin.Array<B3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,53 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationTarget.*
@R(C1::class)
annotation class A1
@Target(FILE)
annotation class C1(val value: Array<A1>)
@R(C2::class)
@Target(CLASS)
annotation class A2
@Target(CLASS, FUNCTION)
annotation class C2(val value: Array<A2>)
@R(C3::class)
@Target(TYPE)
annotation class A3
annotation class C3(val value: Array<A3>)
@R(C4::class)
@Target(ANNOTATION_CLASS)
annotation class A4
@Target(CLASS)
annotation class C4(val value: Array<A4>)
@R(D1::class)
annotation class B1
@Target(CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) // Default target set
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Target(CLASS, FILE)
annotation class B2
@Target(CLASS)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Target(CLASS)
annotation class B3
@Target(ANNOTATION_CLASS)
annotation class D3(val value: Array<B3>)
@R(D4::class)
@Target(TYPE)
annotation class B4
@Target(ANNOTATION_CLASS, CLASS, TYPE_PARAMETER)
annotation class D4(val value: Array<B4>)
@@ -0,0 +1,53 @@
// !LANGUAGE: +RepeatableAnnotations +RepeatableAnnotationContainerConstraints
// FULL_JDK
import java.lang.annotation.Repeatable as R
import kotlin.annotation.AnnotationTarget.*
<!REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR!>@R(C1::class)<!>
annotation class A1
@Target(FILE)
annotation class C1(val value: Array<A1>)
<!REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR!>@R(C2::class)<!>
@Target(CLASS)
annotation class A2
@Target(CLASS, FUNCTION)
annotation class C2(val value: Array<A2>)
<!REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR!>@R(C3::class)<!>
@Target(TYPE)
annotation class A3
annotation class C3(val value: Array<A3>)
<!REPEATABLE_CONTAINER_TARGET_SET_NOT_A_SUBSET_ERROR!>@R(C4::class)<!>
@Target(ANNOTATION_CLASS)
annotation class A4
@Target(CLASS)
annotation class C4(val value: Array<A4>)
@R(D1::class)
annotation class B1
@Target(CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) // Default target set
annotation class D1(val value: Array<B1>)
@R(D2::class)
@Target(CLASS, FILE)
annotation class B2
@Target(CLASS)
annotation class D2(val value: Array<B2>)
@R(D3::class)
@Target(CLASS)
annotation class B3
@Target(ANNOTATION_CLASS)
annotation class D3(val value: Array<B3>)
@R(D4::class)
@Target(TYPE)
annotation class B4
@Target(ANNOTATION_CLASS, CLASS, TYPE_PARAMETER)
annotation class D4(val value: Array<B4>)
@@ -0,0 +1,121 @@
package
@java.lang.annotation.Repeatable(value = C1::class) public final annotation class A1 : kotlin.Annotation {
public constructor A1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C2::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class A2 : kotlin.Annotation {
public constructor A2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C3::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class A3 : kotlin.Annotation {
public constructor A3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = C4::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS}) public final annotation class A4 : kotlin.Annotation {
public constructor A4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D1::class) public final annotation class B1 : kotlin.Annotation {
public constructor B1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D2::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FILE}) public final annotation class B2 : kotlin.Annotation {
public constructor B2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D3::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class B3 : kotlin.Annotation {
public constructor B3()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@java.lang.annotation.Repeatable(value = D4::class) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) public final annotation class B4 : kotlin.Annotation {
public constructor B4()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.FILE}) public final annotation class C1 : kotlin.Annotation {
public constructor C1(/*0*/ value: kotlin.Array<A1>)
public final val value: kotlin.Array<A1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION}) public final annotation class C2 : kotlin.Annotation {
public constructor C2(/*0*/ value: kotlin.Array<A2>)
public final val value: kotlin.Array<A2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class C3 : kotlin.Annotation {
public constructor C3(/*0*/ value: kotlin.Array<A3>)
public final val value: kotlin.Array<A3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class C4 : kotlin.Annotation {
public constructor C4(/*0*/ value: kotlin.Array<A4>)
public final val value: kotlin.Array<A4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FIELD, AnnotationTarget.LOCAL_VARIABLE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public final annotation class D1 : kotlin.Annotation {
public constructor D1(/*0*/ value: kotlin.Array<B1>)
public final val value: kotlin.Array<B1>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) public final annotation class D2 : kotlin.Annotation {
public constructor D2(/*0*/ value: kotlin.Array<B2>)
public final val value: kotlin.Array<B2>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS}) public final annotation class D3 : kotlin.Annotation {
public constructor D3(/*0*/ value: kotlin.Array<B3>)
public final val value: kotlin.Array<B3>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS, AnnotationTarget.TYPE_PARAMETER}) public final annotation class D4 : kotlin.Annotation {
public constructor D4(/*0*/ value: kotlin.Array<B4>)
public final val value: kotlin.Array<B4>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -2112,6 +2112,36 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerAndAnnotationAreBothApplied_1_6.kt");
}
@Test
@TestMetadata("containerArguments_1_5.kt")
public void testContainerArguments_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_5.kt");
}
@Test
@TestMetadata("containerArguments_1_6.kt")
public void testContainerArguments_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_6.kt");
}
@Test
@TestMetadata("containerRetention_1_5.kt")
public void testContainerRetention_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_5.kt");
}
@Test
@TestMetadata("containerRetention_1_6.kt")
public void testContainerRetention_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_6.kt");
}
@Test
@TestMetadata("containerTarget_1_6.kt")
public void testContainerTarget_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerTarget_1_6.kt");
}
@Test
@TestMetadata("javaRepeatableJvmTarget6.kt")
public void testJavaRepeatableJvmTarget6() throws Exception {
@@ -219,6 +219,7 @@ enum class LanguageFeature(
OptInOnOverrideForbidden(KOTLIN_1_6, kind = BUG_FIX),
OptInContagiousSignatures(KOTLIN_1_6, kind = BUG_FIX),
RepeatableAnnotations(KOTLIN_1_6),
RepeatableAnnotationContainerConstraints(KOTLIN_1_6, kind = BUG_FIX),
// 1.7
@@ -2106,6 +2106,36 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerAndAnnotationAreBothApplied_1_6.kt");
}
@Test
@TestMetadata("containerArguments_1_5.kt")
public void testContainerArguments_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_5.kt");
}
@Test
@TestMetadata("containerArguments_1_6.kt")
public void testContainerArguments_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerArguments_1_6.kt");
}
@Test
@TestMetadata("containerRetention_1_5.kt")
public void testContainerRetention_1_5() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_5.kt");
}
@Test
@TestMetadata("containerRetention_1_6.kt")
public void testContainerRetention_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerRetention_1_6.kt");
}
@Test
@TestMetadata("containerTarget_1_6.kt")
public void testContainerTarget_1_6() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/repeatable/containerTarget_1_6.kt");
}
@Test
@TestMetadata("javaRepeatableJvmTarget6.kt")
public void testJavaRepeatableJvmTarget6() throws Exception {
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.js.resolve.diagnostics
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils
import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.resolve.AdditionalAnnotationChecker
import org.jetbrains.kotlin.resolve.BindingContext
@@ -29,6 +30,7 @@ object JsQualifierChecker : AdditionalAnnotationChecker {
entries: List<KtAnnotationEntry>,
actualTargets: List<KotlinTarget>,
trace: BindingTrace,
annotated: KtAnnotated?,
languageVersionSettings: LanguageVersionSettings
) {
val bindingContext = trace.bindingContext