From 65abc94411badf645d5213fee63dc4cdd9cc2b75 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Sat, 30 Oct 2021 02:08:12 +0200 Subject: [PATCH] [ULC] Unify modifiers for RepeatableAnnotationContainer All the other annotation classes has abstract modifier. All nested interfaces has static modifiers. This commit is not so important for compiler, but it is matter for IDE, because when we load classes in IDE via KtLightClassForDecompiledDeclaration -- there are Abstract and Static on the Container class --- .../KtUltraLightClassForRepeatableAnnotationContainer.kt | 6 +++++- .../testData/asJava/lightClasses/AnnotationRepeatable.java | 2 +- .../lightClasses/SpecialAnnotationsOnAnnotationClass.java | 2 +- .../SpecialAnnotationsOnAnnotationClass_1_6.java | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraLightClassForRepeatableAnnotationContainer.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraLightClassForRepeatableAnnotationContainer.kt index b1d5cd9c4aa..33894fba889 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraLightClassForRepeatableAnnotationContainer.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtUltraLightClassForRepeatableAnnotationContainer.kt @@ -79,7 +79,7 @@ private class KtUltraLightModifierListForRepeatableAnnotationContainer( private val containingClass: KtLightClassForSourceDeclaration, support: KtUltraLightSupport, ) : KtUltraLightModifierList(containingClass, support) { - override fun hasModifierProperty(name: String): Boolean = name == PsiModifier.PUBLIC + override fun hasModifierProperty(name: String): Boolean = name in modifiers override fun copy() = KtUltraLightModifierListForRepeatableAnnotationContainer(containingClass, support) override fun PsiAnnotation.additionalConverter(): KtLightAbstractAnnotation? = tryConvertAsRepeatableContainer(support) override val annotationsFilter: ((KtLightAbstractAnnotation) -> Boolean) = { it.qualifiedName in allowedAnnotations } @@ -92,5 +92,9 @@ private class KtUltraLightModifierListForRepeatableAnnotationContainer( CommonClassNames.JAVA_LANG_ANNOTATION_TARGET, StandardNames.FqNames.target.asString(), ) + + // It is marked as Abstract because all the annotation classes are marked as Abstract + // It is marked as Static because all nested interfaces marked as Static + private val modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.ABSTRACT, PsiModifier.STATIC) } } diff --git a/compiler/testData/asJava/lightClasses/AnnotationRepeatable.java b/compiler/testData/asJava/lightClasses/AnnotationRepeatable.java index 3176bb621de..d900225c12b 100644 --- a/compiler/testData/asJava/lightClasses/AnnotationRepeatable.java +++ b/compiler/testData/asJava/lightClasses/AnnotationRepeatable.java @@ -7,7 +7,7 @@ public abstract @interface One /* simple.One*/ { @java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) @kotlin.jvm.internal.RepeatableContainer() -public @interface Container /* simple.One.Container*/ { +public static abstract @interface Container /* simple.One.Container*/ { public abstract simple.One[] value();// value() }} \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass.java b/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass.java index 604a21cd0ad..df002a5c890 100644 --- a/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass.java +++ b/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass.java @@ -15,7 +15,7 @@ public abstract @interface Anno /* Anno*/ { @kotlin.annotation.Retention(value = kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.TYPE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) @kotlin.jvm.internal.RepeatableContainer() -public @interface Container /* Anno.Container*/ { +public static abstract @interface Container /* Anno.Container*/ { public abstract Anno[] value();// value() }} \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass_1_6.java b/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass_1_6.java index 4edbeee0885..a5d57291450 100644 --- a/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass_1_6.java +++ b/compiler/testData/asJava/lightClasses/SpecialAnnotationsOnAnnotationClass_1_6.java @@ -15,7 +15,7 @@ public abstract @interface Anno /* Anno*/ { @kotlin.annotation.Retention(value = kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.TYPE_PARAMETER, kotlin.annotation.AnnotationTarget.TYPE}) @kotlin.jvm.internal.RepeatableContainer() -public @interface Container /* Anno.Container*/ { +public static abstract @interface Container /* Anno.Container*/ { public abstract Anno[] value();// value() }} \ No newline at end of file