[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");
|
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unnamedArgsInJavaAnnotations.kt")
|
||||||
|
public void testUnnamedArgsInJavaAnnotations() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
||||||
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
||||||
|
|||||||
+6
@@ -1413,6 +1413,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unnamedArgsInJavaAnnotations.kt")
|
||||||
|
public void testUnnamedArgsInJavaAnnotations() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
||||||
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
||||||
|
|||||||
+6
@@ -1413,6 +1413,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unnamedArgsInJavaAnnotations.kt")
|
||||||
|
public void testUnnamedArgsInJavaAnnotations() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
||||||
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
||||||
|
|||||||
+6
@@ -1413,6 +1413,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unnamedArgsInJavaAnnotations.kt")
|
||||||
|
public void testUnnamedArgsInJavaAnnotations() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
||||||
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
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.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
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.FirDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
|
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.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -34,8 +40,8 @@ object FirJavaAnnotationsChecker : FirAnnotationChecker() {
|
|||||||
|
|
||||||
override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (context.containingDeclarations.lastOrNull()?.source?.kind != KtRealSourceElementKind) return
|
if (context.containingDeclarations.lastOrNull()?.source?.kind != KtRealSourceElementKind) return
|
||||||
val callableSymbol = expression.annotationTypeRef.toRegularClassSymbol(context.session)
|
val callableSymbol = expression.annotationTypeRef.toClassLikeSymbol(context.session) as? FirClassSymbol<*> ?: return
|
||||||
if (callableSymbol?.origin !is FirDeclarationOrigin.Java) return
|
if (callableSymbol.origin !is FirDeclarationOrigin.Java) return
|
||||||
|
|
||||||
val lookupTag = expression.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag ?: return
|
val lookupTag = expression.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag ?: return
|
||||||
javaToKotlinNameMap[lookupTag.classId]?.let { betterName ->
|
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");
|
runTest("compiler/testData/diagnostics/tests/UnitValue.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unnamedArgsInJavaAnnotations.kt")
|
||||||
|
public void testUnnamedArgsInJavaAnnotations() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/unnamedArgsInJavaAnnotations.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
@TestMetadata("unproperDefaultInitializationInTailrec.kt")
|
||||||
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
public void testUnproperDefaultInitializationInTailrec() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user