From a72515d822d1d2a15ae97d4380d70dd510c7d0b1 Mon Sep 17 00:00:00 2001 From: "victor.petukhov" Date: Tue, 25 Dec 2018 17:37:28 +0300 Subject: [PATCH] Add tests for constructors of annotation classes with `JvmOverloads` (KT-25702) --- compiler/tests-spec/build.gradle.kts | 2 +- .../annotations/annotation-classes/neg/1.kt | 74 ++++++++ .../annotations/annotation-classes/neg/1.txt | 167 ++++++++++++++++++ .../DiagnosticsTestSpecGenerated.java | 31 ++++ 4 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.kt create mode 100644 compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.txt diff --git a/compiler/tests-spec/build.gradle.kts b/compiler/tests-spec/build.gradle.kts index ddebe303e19..34ae43c99f4 100644 --- a/compiler/tests-spec/build.gradle.kts +++ b/compiler/tests-spec/build.gradle.kts @@ -28,7 +28,7 @@ val remoteRunTests by task { val packagePrefix = "org.jetbrains.kotlin." val includeTests = setOf( "checkers.DiagnosticsTestSpecGenerated\$NotLinked\$Contracts*", - "checkers.DiagnosticsTestSpecGenerated\$NotLinked\$Annotations\$Type_annotations*", + "checkers.DiagnosticsTestSpecGenerated\$NotLinked\$Annotations*", "codegen.BlackBoxCodegenTestSpecGenerated\$NotLinked\$Annotations\$Type_annotations*", "codegen.BlackBoxCodegenTestSpecGenerated\$NotLinked\$Objects\$Inheritance*" ) diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.kt b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.kt new file mode 100644 index 00000000000..3621720107e --- /dev/null +++ b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.kt @@ -0,0 +1,74 @@ +/* + * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE) + * + * SECTIONS: annotations, annotation-classes + * NUMBER: 1 + * DESCRIPTION: Annotation classes with forbidden `JvmOverloads` annotation on its constructor. + * UNEXPECTED BEHAVIOUR + * ISSUES: KT-25702 + */ + +// TESTCASE NUMBER: 2, 3, 4 +@Target(AnnotationTarget.CONSTRUCTOR) +annotation class Case12_1 + +@Target(AnnotationTarget.CONSTRUCTOR) +@Retention(AnnotationRetention.SOURCE) +@Repeatable +annotation class Case12_2 + +// TESTCASE NUMBER: 1 +annotation class Case1 @JvmOverloads constructor(val x: Int) + +// TESTCASE NUMBER: 2 +annotation class Case2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] constructor(x: Int = 10) + +// TESTCASE NUMBER: 3 +annotation class Case3 @Case12_2 @Case12_1 @Case12_2 @`JvmOverloads` @Case12_2 @Case12_2 constructor(x: Int = 10) + +// TESTCASE NUMBER: 4 +annotation class Case4 @Case12_2 @[Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 Case12_2 JvmOverloads Case12_1] @Case12_2 @Case12_2 constructor(x: Int = 10) + +// TESTCASE NUMBER: 5 +annotation class Case5 @[JvmOverloads] constructor(val x: Int) + +// TESTCASE NUMBER: 6 +annotation class Case6 @JvmOverloads constructor() + +// TESTCASE NUMBER: 7 +annotation class Case7@JvmOverloads constructor() {} + +// TESTCASE NUMBER: 8 +annotation class Case8 @`JvmOverloads` constructor() + +// TESTCASE NUMBER: 9 +annotation class Case9 @JvmOverloads constructor(val x: Int) + +// TESTCASE NUMBER: 10 +annotation class Case10 @JvmOverloads constructor(val x: Int) + +// TESTCASE NUMBER: 11 +annotation class Case11 > @JvmOverloads constructor(val x: Int) + +// TESTCASE NUMBER: 12 +annotation class Case12 @JvmOverloads constructor(val x: Int) where T: Number + +// TESTCASE NUMBER: 13 +annotation class Case13 constructor(val x: Int) { + annotation class Case1 @JvmOverloads constructor(val x: Int) +} + +// TESTCASE NUMBER: 14 +annotation class Case14 @JvmOverloads constructor(val x: Int) { + annotation class Case1 constructor(val x: Int) +} + +// TESTCASE NUMBER: 15 +object Case15 { + annotation class Case15 @JvmOverloads constructor(val x: Int) +} + +// TESTCASE NUMBER: 16 +class Case16 { + annotation class Case16 @JvmOverloads constructor(val x: Int) +} diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.txt b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.txt new file mode 100644 index 00000000000..39254e6f330 --- /dev/null +++ b/compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.txt @@ -0,0 +1,167 @@ +package + +public final annotation class Case1 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case1(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case10 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case10(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case11> : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case11>(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case12 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case12(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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.CONSTRUCTOR}) public final annotation class Case12_1 : kotlin.Annotation { + public constructor Case12_1() + 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.CONSTRUCTOR}) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) @kotlin.annotation.Repeatable public final annotation class Case12_2 : kotlin.Annotation { + public constructor Case12_2() + 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 Case13 : kotlin.Annotation { + public constructor Case13(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case1 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case1(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case14 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case14(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case1 : kotlin.Annotation { + public constructor Case1(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 object Case15 { + private constructor Case15() + 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 Case15 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case15(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 class Case16 { + public constructor Case16() + 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 Case16 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case16(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case2 : kotlin.Annotation { + @Case12_2 @Case12_2 @Case12_2 @Case12_2 @Case12_2 @Case12_2 @kotlin.jvm.JvmOverloads @Case12_1 public constructor Case2(/*0*/ x: kotlin.Int = ...) + 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 Case3 : kotlin.Annotation { + @Case12_2 @Case12_1 @Case12_2 @kotlin.jvm.JvmOverloads @Case12_2 @Case12_2 public constructor Case3(/*0*/ x: kotlin.Int = ...) + 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 Case4 : kotlin.Annotation { + @Case12_2 @Case12_2 @Case12_2 @Case12_2 @Case12_2 @Case12_2 @Case12_2 @kotlin.jvm.JvmOverloads @Case12_1 @Case12_2 @Case12_2 public constructor Case4(/*0*/ x: kotlin.Int = ...) + 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 Case5 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case5(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 Case6 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case6() + 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 Case7 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case7() + 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 Case8 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case8() + 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 Case9 : kotlin.Annotation { + @kotlin.jvm.JvmOverloads public constructor Case9(/*0*/ x: kotlin.Int) + public final val x: kotlin.Int + 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 +} diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestSpecGenerated.java b/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestSpecGenerated.java index 1a44ace7ca3..125d820bfb3 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestSpecGenerated.java +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestSpecGenerated.java @@ -1371,6 +1371,37 @@ public class DiagnosticsTestSpecGenerated extends AbstractDiagnosticsTestSpec { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/tests-spec/testData/diagnostics/notLinked/annotations"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Annotation_classes extends AbstractDiagnosticsTestSpec { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInAnnotation_classes() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Neg extends AbstractDiagnosticsTestSpec { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + @TestMetadata("1.kt") + public void test1() throws Exception { + runTest("compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg/1.kt"); + } + + public void testAllFilesPresentInNeg() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/tests-spec/testData/diagnostics/notLinked/annotations/annotation-classes/neg"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + } + } + @TestMetadata("compiler/tests-spec/testData/diagnostics/notLinked/annotations/type-annotations") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)