diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 0e5e03da741..244b33e1f0c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -1413,6 +1413,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/UnitValue.kt"); } + @Test + @TestMetadata("unnamedArgsInJavaAnnotations.kt") + public void testUnnamedArgsInJavaAnnotations() throws Exception { + runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt"); + } + @Test @TestMetadata("unproperDefaultInitializationInTailrec.kt") public void testUnproperDefaultInitializationInTailrec() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 26d3a86e8fd..820d966675b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -1413,6 +1413,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/UnitValue.kt"); } + @Test + @TestMetadata("unnamedArgsInJavaAnnotations.kt") + public void testUnnamedArgsInJavaAnnotations() throws Exception { + runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt"); + } + @Test @TestMetadata("unproperDefaultInitializationInTailrec.kt") public void testUnproperDefaultInitializationInTailrec() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index ff2231c2252..2b1924fb6c3 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -1413,6 +1413,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/UnitValue.kt"); } + @Test + @TestMetadata("unnamedArgsInJavaAnnotations.kt") + public void testUnnamedArgsInJavaAnnotations() throws Exception { + runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt"); + } + @Test @TestMetadata("unproperDefaultInitializationInTailrec.kt") public void testUnproperDefaultInitializationInTailrec() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 04e535cc37a..5412bfb9597 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -1413,6 +1413,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/UnitValue.kt"); } + @Test + @TestMetadata("unnamedArgsInJavaAnnotations.kt") + public void testUnnamedArgsInJavaAnnotations() throws Exception { + runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt"); + } + @Test @TestMetadata("unproperDefaultInitializationInTailrec.kt") public void testUnproperDefaultInitializationInTailrec() throws Exception { diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt index 66d8e0065fb..6c9e7e54a87 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJavaAnnotationsChecker.kt @@ -12,11 +12,17 @@ import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin +import org.jetbrains.kotlin.fir.declarations.toAnnotationClassLikeSymbol import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList +import org.jetbrains.kotlin.fir.resolve.dfa.symbol +import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.name.ClassId @@ -34,8 +40,8 @@ object FirJavaAnnotationsChecker : FirAnnotationChecker() { override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) { if (context.containingDeclarations.lastOrNull()?.source?.kind != KtRealSourceElementKind) return - val callableSymbol = expression.annotationTypeRef.toRegularClassSymbol(context.session) - if (callableSymbol?.origin !is FirDeclarationOrigin.Java) return + val callableSymbol = expression.annotationTypeRef.toClassLikeSymbol(context.session) as? FirClassSymbol<*> ?: return + if (callableSymbol.origin !is FirDeclarationOrigin.Java) return val lookupTag = expression.annotationTypeRef.coneTypeSafe()?.lookupTag ?: return javaToKotlinNameMap[lookupTag.classId]?.let { betterName -> diff --git a/compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt b/compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt new file mode 100644 index 00000000000..3ea8f83ed56 --- /dev/null +++ b/compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt @@ -0,0 +1,35 @@ +// FIR_IDENTICAL +// ISSUE: KT-61309 +// ALLOW_KOTLIN_PACKAGE +// FILE: Test.java +package javacode; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +public @interface Test { + Class expected() default None.class; + + long timeout() default 0L; +} + +// FILE: test.kt + +package kotlin.test + +typealias Test = javacode.Test + +// FILE: main.kt + +import kotlin.test.Test +import java.io.IOException + +@Test(IOException::class) +fun someTest() {} + +@Test(expected = IOException::class) +fun someRest() {} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 4e672ea3fc2..3c57ffe6c9d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -1413,6 +1413,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/UnitValue.kt"); } + @Test + @TestMetadata("unnamedArgsInJavaAnnotations.kt") + public void testUnnamedArgsInJavaAnnotations() throws Exception { + runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt"); + } + @Test @TestMetadata("unproperDefaultInitializationInTailrec.kt") public void testUnproperDefaultInitializationInTailrec() throws Exception {