[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.
This commit is contained in:
committed by
Space Team
parent
1efa9abf57
commit
f434228244
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+8
-2
@@ -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<ConeClassLikeType>()?.lookupTag ?: return
|
||||
javaToKotlinNameMap[lookupTag.classId]?.let { betterName ->
|
||||
|
||||
@@ -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() {}
|
||||
Generated
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user