[FIR] calculate java Target annotation on COMPILER_REQUIRED_ANNOTATIONS phase
^KT-57849 ^KT-57949
This commit is contained in:
committed by
Space Team
parent
1c456b216b
commit
7b91cd0ff3
+3
-3
@@ -21,7 +21,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
|||||||
COMPILER_REQUIRED_ANNOTATIONS:
|
COMPILER_REQUIRED_ANNOTATIONS:
|
||||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||||
[ResolvedTo(RAW_FIR)] annotations container
|
[ResolvedTo(RAW_FIR)] annotations container
|
||||||
@java.lang.annotation.Target[Unresolved](ElementType#.TYPE_USE#) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class ResolveMe : R|kotlin/Annotation| {
|
@R|java/lang/annotation/Target|[CompilerRequiredAnnotations](ElementType#.TYPE_USE#) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class ResolveMe : R|kotlin/Annotation| {
|
||||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
||||||
LAZY_super<R|kotlin/Any|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
|||||||
COMPANION_GENERATION:
|
COMPANION_GENERATION:
|
||||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||||
[ResolvedTo(RAW_FIR)] annotations container
|
[ResolvedTo(RAW_FIR)] annotations container
|
||||||
@java.lang.annotation.Target[Unresolved](ElementType#.TYPE_USE#) public? final? [ResolvedTo(COMPANION_GENERATION)] annotation class ResolveMe : R|kotlin/Annotation| {
|
@R|java/lang/annotation/Target|[CompilerRequiredAnnotations](ElementType#.TYPE_USE#) public? final? [ResolvedTo(COMPANION_GENERATION)] annotation class ResolveMe : R|kotlin/Annotation| {
|
||||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
||||||
LAZY_super<R|kotlin/Any|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
|||||||
SUPER_TYPES:
|
SUPER_TYPES:
|
||||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||||
[ResolvedTo(RAW_FIR)] annotations container
|
[ResolvedTo(RAW_FIR)] annotations container
|
||||||
@java.lang.annotation.Target[Unresolved](ElementType#.TYPE_USE#) public? final? [ResolvedTo(SUPER_TYPES)] annotation class ResolveMe : R|kotlin/Annotation| {
|
@R|java/lang/annotation/Target|[CompilerRequiredAnnotations](ElementType#.TYPE_USE#) public? final? [ResolvedTo(SUPER_TYPES)] annotation class ResolveMe : R|kotlin/Annotation| {
|
||||||
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=ResolveMe] constructor(): R|ResolveMe| {
|
||||||
LAZY_super<R|kotlin/Any|>
|
LAZY_super<R|kotlin/Any|>
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -1931,6 +1931,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||||
|
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("javaretention.kt")
|
@TestMetadata("javaretention.kt")
|
||||||
public void testJavaretention() throws Exception {
|
public void testJavaretention() throws Exception {
|
||||||
|
|||||||
+6
@@ -1931,6 +1931,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||||
|
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("javaretention.kt")
|
@TestMetadata("javaretention.kt")
|
||||||
public void testJavaretention() throws Exception {
|
public void testJavaretention() throws Exception {
|
||||||
|
|||||||
+6
@@ -1931,6 +1931,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||||
|
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("javaretention.kt")
|
@TestMetadata("javaretention.kt")
|
||||||
public void testJavaretention() throws Exception {
|
public void testJavaretention() throws Exception {
|
||||||
|
|||||||
+6
@@ -1937,6 +1937,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||||
|
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("javaretention.kt")
|
@TestMetadata("javaretention.kt")
|
||||||
public void testJavaretention() throws Exception {
|
public void testJavaretention() throws Exception {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.java.enhancement.FirAnnotationTypeQualifierResol
|
|||||||
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
|
import org.jetbrains.kotlin.fir.java.enhancement.FirEnhancedSymbolsStorage
|
||||||
import org.jetbrains.kotlin.fir.java.scopes.JavaOverridabilityRules
|
import org.jetbrains.kotlin.fir.java.scopes.JavaOverridabilityRules
|
||||||
import org.jetbrains.kotlin.fir.java.FirSyntheticPropertiesStorage
|
import org.jetbrains.kotlin.fir.java.FirSyntheticPropertiesStorage
|
||||||
|
import org.jetbrains.kotlin.fir.java.enhancement.JavaCompilerRequiredAnnotationEnhancementProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolverFactory
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
|
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticNamesProvider
|
||||||
@@ -51,6 +52,7 @@ import org.jetbrains.kotlin.fir.types.TypeComponents
|
|||||||
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
import org.jetbrains.kotlin.incremental.components.EnumWhenTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationEnhancementProvider
|
||||||
|
|
||||||
// -------------------------- Required components --------------------------
|
// -------------------------- Required components --------------------------
|
||||||
|
|
||||||
@@ -107,6 +109,7 @@ fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolv
|
|||||||
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
||||||
register(DeserializedClassConfigurator::class, JvmDeserializedClassConfigurator(this))
|
register(DeserializedClassConfigurator::class, JvmDeserializedClassConfigurator(this))
|
||||||
register(FirEnumEntriesSupport::class, FirJvmEnumEntriesSupport(this))
|
register(FirEnumEntriesSupport::class, FirJvmEnumEntriesSupport(this))
|
||||||
|
register(CompilerRequiredAnnotationEnhancementProvider::class, JavaCompilerRequiredAnnotationEnhancementProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------- Resolve components --------------------------
|
// -------------------------- Resolve components --------------------------
|
||||||
|
|||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.java.enhancement
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationEnhancementProvider
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
|
|
||||||
|
object JavaCompilerRequiredAnnotationEnhancementProvider : CompilerRequiredAnnotationEnhancementProvider() {
|
||||||
|
override fun enhance(enumSymbol: FirClassSymbol<*>, enumEntrySymbol: FirEnumEntrySymbol, session: FirSession): FirEnumEntrySymbol {
|
||||||
|
val firRegularClass = enumSymbol.fir as? FirRegularClass ?: return enumEntrySymbol
|
||||||
|
if (enumSymbol.classId != StandardClassIds.Annotations.Java.ElementType) return enumEntrySymbol
|
||||||
|
|
||||||
|
return FirSignatureEnhancement(firRegularClass, session) { emptyList() }.enhancedProperty(
|
||||||
|
enumEntrySymbol,
|
||||||
|
enumEntrySymbol.name,
|
||||||
|
) as FirEnumEntrySymbol
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-1
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.Deprecated
|
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.Deprecated
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.DeprecatedSinceKotlin
|
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.DeprecatedSinceKotlin
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.JvmRecord
|
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.JvmRecord
|
||||||
@@ -55,6 +56,7 @@ object CompilerRequiredAnnotationsHelper {
|
|||||||
internal val REQUIRED_ANNOTATIONS_WITH_ARGUMENTS: Set<ClassId> = setOf(
|
internal val REQUIRED_ANNOTATIONS_WITH_ARGUMENTS: Set<ClassId> = setOf(
|
||||||
Deprecated,
|
Deprecated,
|
||||||
Target,
|
Target,
|
||||||
|
StandardClassIds.Annotations.Java.Target,
|
||||||
)
|
)
|
||||||
|
|
||||||
val REQUIRED_ANNOTATIONS: Set<ClassId> = REQUIRED_ANNOTATIONS_WITH_ARGUMENTS + setOf(
|
val REQUIRED_ANNOTATIONS: Set<ClassId> = REQUIRED_ANNOTATIONS_WITH_ARGUMENTS + setOf(
|
||||||
@@ -145,7 +147,10 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer(
|
|||||||
it is FirEnumEntry && it.name == calleeReference.name
|
it is FirEnumEntry && it.name == calleeReference.name
|
||||||
}?.symbol as? FirEnumEntrySymbol ?: return
|
}?.symbol as? FirEnumEntrySymbol ?: return
|
||||||
|
|
||||||
updateCallee(calleeReference, calleeSymbol)
|
val enhancedCalleeSymbol = session.compilerRequiredAnnotationEnhancementProvider?.enhance(symbol, calleeSymbol, session)
|
||||||
|
?: calleeSymbol
|
||||||
|
|
||||||
|
updateCallee(calleeReference, enhancedCalleeSymbol)
|
||||||
|
|
||||||
replaceExplicitReceiver(resolvedReceiver)
|
replaceExplicitReceiver(resolvedReceiver)
|
||||||
replaceDispatchReceiver(resolvedReceiver)
|
replaceDispatchReceiver(resolvedReceiver)
|
||||||
|
|||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.resolve.transformers.plugin
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.FirSessionComponent
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
|
||||||
|
|
||||||
|
abstract class CompilerRequiredAnnotationEnhancementProvider : FirSessionComponent {
|
||||||
|
abstract fun enhance(enumSymbol: FirClassSymbol<*>, enumEntrySymbol: FirEnumEntrySymbol, session: FirSession): FirEnumEntrySymbol
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val FirSession.compilerRequiredAnnotationEnhancementProvider: CompilerRequiredAnnotationEnhancementProvider? by FirSession.nullableSessionComponentAccessor<CompilerRequiredAnnotationEnhancementProvider>()
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
import java.lang.annotation.Target
|
||||||
|
import java.lang.annotation.ElementType.PACKAGE
|
||||||
|
|
||||||
|
<!DEPRECATED_JAVA_ANNOTATION!>@Target(PACKAGE)<!>
|
||||||
|
annotation class my
|
||||||
Generated
+6
@@ -1937,6 +1937,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||||
|
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("javaretention.kt")
|
@TestMetadata("javaretention.kt")
|
||||||
public void testJavaretention() throws Exception {
|
public void testJavaretention() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user