[FIR] Fix false positive POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION
The original Java checker has an early return in
case of `resultingDescriptor !is JavaClassConstructorDescriptor`.
It fires if the descriptor is
`TypeAliasConstructorDescriptor`, thus further
diagnostics are not reported.
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 09b0ee5..65e5dc8 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
@@ -1414,6 +1414,12 @@
}
@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 {
runTest("compiler/testData/diagnostics/tests/unproperDefaultInitializationInTailrec.kt");
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 d3b8dba..e1b78a0 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
@@ -1414,6 +1414,12 @@
}
@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 {
runTest("compiler/testData/diagnostics/tests/unproperDefaultInitializationInTailrec.kt");
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 91e0e89..f0ca67f 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
@@ -1414,6 +1414,12 @@
}
@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 {
runTest("compiler/testData/diagnostics/tests/unproperDefaultInitializationInTailrec.kt");
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 a86b03a..bff1f5b 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
@@ -1414,6 +1414,12 @@
}
@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 {
runTest("compiler/testData/diagnostics/tests/unproperDefaultInitializationInTailrec.kt");
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 66d8e00..6c9e7e5 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.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 @@
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<ConeClassLikeType>()?.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 0000000..3ea8f83
--- /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<? extends Throwable> 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 18c62c9..c91767f 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
@@ -1414,6 +1414,12 @@
}
@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 {
runTest("compiler/testData/diagnostics/tests/unproperDefaultInitializationInTailrec.kt");