diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.java b/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.java new file mode 100644 index 00000000000..563fd9ec39f --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.java @@ -0,0 +1,4 @@ +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@kotlin.annotation.Retention(value = kotlin.annotation.AnnotationRetention.RUNTIME) +public abstract @interface ImplicitRetension /* ImplicitRetension*/ { +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.kt b/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.kt new file mode 100644 index 00000000000..7272bd24efb --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.kt @@ -0,0 +1,7 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Retention +// EXPECTED: kotlin.annotation.Retention +// UNEXPECTED: java.lang.annotation.Target + +@Retention(AnnotationRetention.RUNTIME) +annotation class ImplicitRetension diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.java b/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.java new file mode 100644 index 00000000000..db80c72585d --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.java @@ -0,0 +1,3 @@ +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface ImplicitRetension /* ImplicitRetension*/ { +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.kt b/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.kt new file mode 100644 index 00000000000..d58fd55b6c7 --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.kt @@ -0,0 +1,5 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Retention +// UNEXPECTED: java.lang.annotation.Target + +annotation class ImplicitRetension diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.java b/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.java new file mode 100644 index 00000000000..40f5bb71323 --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.java @@ -0,0 +1,5 @@ +@java.lang.annotation.Repeatable(value = TwoContainer.class) +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Two /* Two*/ { + public abstract java.lang.String name();// name() +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.kt b/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.kt new file mode 100644 index 00000000000..f66a1f6958c --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.kt @@ -0,0 +1,8 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Repeatable +// UNEXPECTED:kotlin.annotation.Repeatable +// FULL_JDK + +@java.lang.annotation.Repeatable(TwoContainer::class) +annotation class Two(val name: String) +annotation class TwoContainer(val value: Array) diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.java b/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.java new file mode 100644 index 00000000000..5b6b66cb9f3 --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.java @@ -0,0 +1,5 @@ +@java.lang.annotation.Repeatable() +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Two /* Two*/ { + public abstract java.lang.String name();// name() +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.kt b/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.kt new file mode 100644 index 00000000000..9a4f57a59af --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.kt @@ -0,0 +1,7 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Repeatable +// UNEXPECTED: kotlin.annotation.Repeatable + +@JvmRepeatable(TwoContainer::class) +annotation class Two(val name: String) +annotation class TwoContainer(val value: Array) diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.java b/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.java new file mode 100644 index 00000000000..49f2b36f0d0 --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.java @@ -0,0 +1,8 @@ +@java.lang.annotation.Repeatable(value = One.Container.class) +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@kotlin.annotation.Repeatable() +public abstract @interface One /* One*/ { + public abstract java.lang.String value();// value() + + class Container ... +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.kt b/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.kt new file mode 100644 index 00000000000..8d485768fea --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.kt @@ -0,0 +1,6 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Repeatable +// EXPECTED: kotlin.annotation.Repeatable + +@Repeatable +annotation class One(val value: String) \ No newline at end of file diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/Target.java b/analysis/symbol-light-classes/testData/annotationsEquality/Target.java new file mode 100644 index 00000000000..2c48d08151d --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/Target.java @@ -0,0 +1,5 @@ +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.PARAMETER}) +@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.VALUE_PARAMETER}) +public abstract @interface AnnotationClass /* AnnotationClass*/ { +} diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/Target.kt b/analysis/symbol-light-classes/testData/annotationsEquality/Target.kt new file mode 100644 index 00000000000..815dec7774a --- /dev/null +++ b/analysis/symbol-light-classes/testData/annotationsEquality/Target.kt @@ -0,0 +1,7 @@ +// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForAnnotationClass +// EXPECTED: java.lang.annotation.Target +// EXPECTED: java.lang.annotation.Retention +// EXPECTED: kotlin.annotation.Target + +@Target(AnnotationTarget.VALUE_PARAMETER) +annotation class AnnotationClass diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java index dad763f8591..d227f8383b1 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java @@ -24,12 +24,48 @@ public class SymbolLightClassesAnnotationEqualityForSourceTestGenerated extends KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/symbol-light-classes/testData/annotationsEquality"), Pattern.compile("^(.+)\\.(kt)$"), null, true); } + @Test + @TestMetadata("ExplicitRetension.kt") + public void testExplicitRetension() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.kt"); + } + + @Test + @TestMetadata("ImplicitRetension.kt") + public void testImplicitRetension() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/ImplicitRetension.kt"); + } + + @Test + @TestMetadata("JavaRepeatable.kt") + public void testJavaRepeatable() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/JavaRepeatable.kt"); + } + + @Test + @TestMetadata("JvmRepeatable.kt") + public void testJvmRepeatable() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/JvmRepeatable.kt"); + } + @Test @TestMetadata("OverrideMethod.kt") public void testOverrideMethod() throws Exception { runTest("analysis/symbol-light-classes/testData/annotationsEquality/OverrideMethod.kt"); } + @Test + @TestMetadata("Repeatable.kt") + public void testRepeatable() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/Repeatable.kt"); + } + + @Test + @TestMetadata("Target.kt") + public void testTarget() throws Exception { + runTest("analysis/symbol-light-classes/testData/annotationsEquality/Target.kt"); + } + @Test @TestMetadata("TopLevelFunctionWithDeprecatedAnnotation.kt") public void testTopLevelFunctionWithDeprecatedAnnotation() throws Exception {