[FIR] Don't check class super type annotations for loops

Only do it for typealiases.

#KT-64059 Fixed
This commit is contained in:
Kirill Rakhman
2023-12-14 14:19:30 +01:00
committed by Space Team
parent 984493fe8b
commit 242e16baea
7 changed files with 46 additions and 4 deletions
@@ -2100,6 +2100,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/annotations/nestedAliasWithNestedAnnotationInLocalClass.kt");
}
@Test
@TestMetadata("nestedAnnotationOnOuterClassDeclaration.kt")
public void testNestedAnnotationOnOuterClassDeclaration() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAnnotationOnOuterClassDeclaration.kt");
}
@Test
@TestMetadata("nestedClassAsAnnotationParameter.kt")
public void testNestedClassAsAnnotationParameter() throws Exception {
@@ -2100,6 +2100,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/annotations/nestedAliasWithNestedAnnotationInLocalClass.kt");
}
@Test
@TestMetadata("nestedAnnotationOnOuterClassDeclaration.kt")
public void testNestedAnnotationOnOuterClassDeclaration() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAnnotationOnOuterClassDeclaration.kt");
}
@Test
@TestMetadata("nestedClassAsAnnotationParameter.kt")
public void testNestedClassAsAnnotationParameter() throws Exception {
@@ -2094,6 +2094,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/annotations/nestedAliasWithNestedAnnotationInLocalClass.kt");
}
@Test
@TestMetadata("nestedAnnotationOnOuterClassDeclaration.kt")
public void testNestedAnnotationOnOuterClassDeclaration() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAnnotationOnOuterClassDeclaration.kt");
}
@Test
@TestMetadata("nestedClassAsAnnotationParameter.kt")
public void testNestedClassAsAnnotationParameter() throws Exception {
@@ -2100,6 +2100,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/annotations/nestedAliasWithNestedAnnotationInLocalClass.kt");
}
@Test
@TestMetadata("nestedAnnotationOnOuterClassDeclaration.kt")
public void testNestedAnnotationOnOuterClassDeclaration() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAnnotationOnOuterClassDeclaration.kt");
}
@Test
@TestMetadata("nestedClassAsAnnotationParameter.kt")
public void testNestedClassAsAnnotationParameter() throws Exception {
@@ -721,10 +721,12 @@ open class SupertypeComputationSession {
var isErrorInSupertypesFound = false
val resultSupertypeRefs = mutableListOf<FirResolvedTypeRef>()
for (supertypeRef in supertypeRefs) {
for (annotation in supertypeRef.annotations) {
val resolvedType = annotation.resolvedType as? ConeClassLikeType ?: continue
val typeArgumentClassLikeDeclaration = resolvedType.lookupTag.toSymbol(session)?.fir
checkIsInLoop(typeArgumentClassLikeDeclaration, wasSubtypingInvolved, wereTypeArgumentsInvolved)
if (isTypeAlias) {
for (annotation in supertypeRef.annotations) {
val resolvedType = annotation.resolvedType as? ConeClassLikeType ?: continue
val typeArgumentClassLikeDeclaration = resolvedType.lookupTag.toSymbol(session)?.fir
checkIsInLoop(typeArgumentClassLikeDeclaration, wasSubtypingInvolved, wereTypeArgumentsInvolved)
}
}
val supertypeFir = supertypeRef.firClassLike(session)
checkIsInLoop(supertypeFir, isSubtypingInvolved, wereTypeArgumentsInvolved)
@@ -0,0 +1,10 @@
// FIR_IDENTICAL
// ISSUE: KT-64059
interface OuterInterface
class MyClass: @MyClass.NestedAnnotation OuterInterface {
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
annotation class NestedAnnotation
}
@@ -2100,6 +2100,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAliasWithNestedAnnotationInLocalClass.kt");
}
@Test
@TestMetadata("nestedAnnotationOnOuterClassDeclaration.kt")
public void testNestedAnnotationOnOuterClassDeclaration() throws Exception {
runTest("compiler/testData/diagnostics/tests/annotations/nestedAnnotationOnOuterClassDeclaration.kt");
}
@Test
@TestMetadata("nestedClassAsAnnotationParameter.kt")
public void testNestedClassAsAnnotationParameter() throws Exception {