FIR LC: populate default retention policy of annotations
This commit is contained in:
committed by
Ilya Kirillov
parent
d196050d9f
commit
e446c988ee
+44
-6
@@ -6,7 +6,9 @@
|
||||
package org.jetbrains.kotlin.light.classes.symbol
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.CommonClassNames.JAVA_LANG_ANNOTATION_RETENTION
|
||||
import com.intellij.psi.PsiAnnotation
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.annotations.NotNull
|
||||
import org.jetbrains.annotations.Nullable
|
||||
@@ -16,14 +18,16 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtEnumEntryAnnotationValue
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.KtNamedAnnotationValue
|
||||
import org.jetbrains.kotlin.builtins.StandardNames.DEFAULT_VALUE_PARAMETER
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_CLASS_ID
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.RETENTION_POLICY_ENUM
|
||||
import org.jetbrains.kotlin.name.*
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_MULTIFILE_CLASS_ID
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_NAME_CLASS_ID
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_OVERLOADS_CLASS_ID
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_SYNTHETIC_ANNOTATION_CLASS_ID
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_CLASS_ID
|
||||
import org.jetbrains.kotlin.resolve.inline.INLINE_ONLY_ANNOTATION_FQ_NAME
|
||||
|
||||
@@ -101,11 +105,21 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
|
||||
FirLightSimpleAnnotation(it.name, parent)
|
||||
}
|
||||
|
||||
if (annotations.isEmpty()) {
|
||||
return if (nullabilityAnnotation != null) listOf(nullabilityAnnotation) else emptyList()
|
||||
}
|
||||
val parentIsAnnotation = (parent as? PsiClass)?.isAnnotationType == true
|
||||
|
||||
val result = mutableListOf<PsiAnnotation>()
|
||||
if (annotations.isEmpty()) {
|
||||
if (parentIsAnnotation) {
|
||||
result.add(createRetentionRuntimeAnnotation(parent))
|
||||
}
|
||||
|
||||
if (nullabilityAnnotation != null) {
|
||||
result.add(nullabilityAnnotation)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
for (annotation in annotations) {
|
||||
|
||||
val siteTarget = annotation.useSiteTarget
|
||||
@@ -117,9 +131,33 @@ internal fun KtAnnotatedSymbol.computeAnnotations(
|
||||
}
|
||||
}
|
||||
|
||||
if (parentIsAnnotation &&
|
||||
annotations.none { it.classId?.asFqNameString() == JAVA_LANG_ANNOTATION_RETENTION }
|
||||
) {
|
||||
result.add(createRetentionRuntimeAnnotation(parent))
|
||||
}
|
||||
|
||||
if (nullabilityAnnotation != null) {
|
||||
result.add(nullabilityAnnotation)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
private fun createRetentionRuntimeAnnotation(parent: PsiElement): PsiAnnotation =
|
||||
FirLightSimpleAnnotation(
|
||||
JAVA_LANG_ANNOTATION_RETENTION,
|
||||
parent,
|
||||
listOf(
|
||||
KtNamedAnnotationValue(
|
||||
name = DEFAULT_VALUE_PARAMETER,
|
||||
expression = KtEnumEntryAnnotationValue(
|
||||
callableId = CallableId(
|
||||
ClassId.fromString(RETENTION_POLICY_ENUM.asString()),
|
||||
Name.identifier(AnnotationRetention.RUNTIME.name)
|
||||
),
|
||||
sourcePsi = null
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface Anno /* Anno*/ {
|
||||
public abstract double d();// d()
|
||||
|
||||
|
||||
@@ -1,4 +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()
|
||||
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
@java.lang.annotation.Repeatable()
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Repeatable()
|
||||
public abstract @interface Two /* Two*/ {
|
||||
public abstract java.lang.String name();// name()
|
||||
|
||||
+1
@@ -1,4 +1,5 @@
|
||||
@java.lang.annotation.Repeatable()
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Repeatable()
|
||||
public abstract @interface Two /* Two*/ {
|
||||
public abstract java.lang.String name();// name()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Repeatable()
|
||||
public abstract @interface One /* simple.One*/ {
|
||||
public abstract java.lang.String value();// value()
|
||||
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.MustBeDocumented()
|
||||
@kotlin.annotation.Repeatable()
|
||||
@kotlin.annotation.Retention(value = kotlin.annotation.AnnotationRetention.SOURCE)
|
||||
|
||||
-13
@@ -1,13 +0,0 @@
|
||||
public abstract @interface Anno /* Anno*/ {
|
||||
}
|
||||
|
||||
public final class TestClass /* TestClass*/ {
|
||||
private int hello;
|
||||
|
||||
public TestClass(int);// .ctor(int)
|
||||
|
||||
public final int getHello();// getHello()
|
||||
|
||||
public final void setHello(@Anno() int);// setHello(int)
|
||||
|
||||
}
|
||||
@@ -1,23 +1,29 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.EXPRESSION})
|
||||
public abstract @interface Anno2 /* Anno2*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER, kotlin.annotation.AnnotationTarget.EXPRESSION})
|
||||
public abstract @interface Anno3 /* Anno3*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.CLASS)
|
||||
public abstract @interface Anno4 /* Anno4*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = ?)
|
||||
public abstract @interface Anno5 /* Anno5*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = ?)
|
||||
public abstract @interface Anno6 /* Anno6*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface AnnoWithCompanion /* AnnoWithCompanion*/ {
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final AnnoWithCompanion.Companion Companion;
|
||||
@@ -34,6 +40,7 @@ public static final class Companion /* AnnoWithCompanion.Companion*/ {
|
||||
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface Anno /* Anno*/ {
|
||||
public abstract Anno[] x();// x()
|
||||
|
||||
@@ -42,23 +49,27 @@ public abstract @interface Anno /* Anno*/ {
|
||||
}
|
||||
|
||||
@Deprecated(message = "This anno is deprecated, use === instead", replaceWith = ?)
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.MustBeDocumented()
|
||||
@kotlin.annotation.Retention(value = kotlin.annotation.AnnotationRetention.SOURCE)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.CLASS)
|
||||
public abstract @interface Fancy /* Fancy*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface ReplaceWith /* ReplaceWith*/ {
|
||||
public abstract java.lang.String expression();// expression()
|
||||
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface AnnotatedAttribute /* AnnotatedAttribute*/ {
|
||||
@Anno()
|
||||
public abstract java.lang.String x();// x()
|
||||
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface Deprecated /* Deprecated*/ {
|
||||
public abstract ReplaceWith replaceWith();// replaceWith()
|
||||
|
||||
@@ -66,6 +77,7 @@ public abstract @interface Deprecated /* Deprecated*/ {
|
||||
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface Ann /* Ann*/ {
|
||||
public abstract java.lang.Class<? extends java.lang.Object> arg2();// arg2()
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface SimpleAnn /* SimpleAnn*/ {
|
||||
public abstract java.lang.String value();// value()
|
||||
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
public abstract @interface Ann /* Ann*/ {
|
||||
public abstract SimpleAnn[] t();// t()
|
||||
|
||||
|
||||
@@ -1,27 +1,34 @@
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A0 /* A0*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A1 /* A1*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A2 /* A2*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A3 /* A3*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A4 /* A4*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A5 /* A5*/ {
|
||||
}
|
||||
|
||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
||||
@kotlin.annotation.Target(allowedTargets = kotlin.annotation.AnnotationTarget.VALUE_PARAMETER)
|
||||
public abstract @interface A6 /* A6*/ {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user