[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:
|
||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||
[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| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
@@ -31,7 +31,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||
COMPANION_GENERATION:
|
||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||
[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| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
@@ -41,7 +41,7 @@ FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||
SUPER_TYPES:
|
||||
FILE: [ResolvedTo(IMPORTS)] annotationClassWithJavaTarget.kt
|
||||
[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| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
+6
@@ -1931,6 +1931,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
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
|
||||
@TestMetadata("javaretention.kt")
|
||||
public void testJavaretention() throws Exception {
|
||||
|
||||
+6
@@ -1931,6 +1931,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
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
|
||||
@TestMetadata("javaretention.kt")
|
||||
public void testJavaretention() throws Exception {
|
||||
|
||||
+6
@@ -1931,6 +1931,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
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
|
||||
@TestMetadata("javaretention.kt")
|
||||
public void testJavaretention() throws Exception {
|
||||
|
||||
+6
@@ -1937,6 +1937,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
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
|
||||
@TestMetadata("javaretention.kt")
|
||||
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.scopes.JavaOverridabilityRules
|
||||
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.calls.ConeCallConflictResolverFactory
|
||||
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.LookupTracker
|
||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationEnhancementProvider
|
||||
|
||||
// -------------------------- Required components --------------------------
|
||||
|
||||
@@ -107,6 +109,7 @@ fun FirSession.registerCommonJavaComponents(javaModuleResolver: JavaModuleResolv
|
||||
register(PlatformSpecificOverridabilityRules::class, JavaOverridabilityRules(this))
|
||||
register(DeserializedClassConfigurator::class, JvmDeserializedClassConfigurator(this))
|
||||
register(FirEnumEntriesSupport::class, FirJvmEnumEntriesSupport(this))
|
||||
register(CompilerRequiredAnnotationEnhancementProvider::class, JavaCompilerRequiredAnnotationEnhancementProvider)
|
||||
}
|
||||
|
||||
// -------------------------- 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.FqName
|
||||
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.DeprecatedSinceKotlin
|
||||
import org.jetbrains.kotlin.name.StandardClassIds.Annotations.JvmRecord
|
||||
@@ -55,6 +56,7 @@ object CompilerRequiredAnnotationsHelper {
|
||||
internal val REQUIRED_ANNOTATIONS_WITH_ARGUMENTS: Set<ClassId> = setOf(
|
||||
Deprecated,
|
||||
Target,
|
||||
StandardClassIds.Annotations.Java.Target,
|
||||
)
|
||||
|
||||
val REQUIRED_ANNOTATIONS: Set<ClassId> = REQUIRED_ANNOTATIONS_WITH_ARGUMENTS + setOf(
|
||||
@@ -145,7 +147,10 @@ abstract class AbstractFirSpecificAnnotationResolveTransformer(
|
||||
it is FirEnumEntry && it.name == calleeReference.name
|
||||
}?.symbol as? FirEnumEntrySymbol ?: return
|
||||
|
||||
updateCallee(calleeReference, calleeSymbol)
|
||||
val enhancedCalleeSymbol = session.compilerRequiredAnnotationEnhancementProvider?.enhance(symbol, calleeSymbol, session)
|
||||
?: calleeSymbol
|
||||
|
||||
updateCallee(calleeReference, enhancedCalleeSymbol)
|
||||
|
||||
replaceExplicitReceiver(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");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("javaKotlinTargetRetentionWithExplicitImport.kt")
|
||||
public void testJavaKotlinTargetRetentionWithExplicitImport() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetentionWithExplicitImport.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("javaretention.kt")
|
||||
public void testJavaretention() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user