[FIR] Prevent compiler crash on lambdas in annotations

^KT-59110 Fixed
This commit is contained in:
Nikolay Lunyak
2023-07-26 16:26:26 +03:00
committed by Space Team
parent 31f21d8593
commit 61d2e338a4
13 changed files with 108 additions and 73 deletions
@@ -47,22 +47,16 @@ internal abstract class LLFirAbstractBodyTargetResolver(
override fun withFile(firFile: FirFile, action: () -> Unit) {
transformer.context.withFile(firFile, transformer.components) {
transformer.firResolveContextCollector?.let { collector ->
collector.addFileContext(firFile, transformer.context.towerDataContext)
}
transformer.firResolveContextCollector?.addFileContext(firFile, transformer.context.towerDataContext)
action()
}
}
@Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR)
override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) {
transformer.declarationsTransformer.context.withContainingClass(firClass) {
transformer.declarationsTransformer.withRegularClass(firClass) {
transformer.firResolveContextCollector?.let { collector ->
collector.addDeclarationContext(firClass, transformer.context)
}
transformer.declarationsTransformer?.context?.withContainingClass(firClass) {
transformer.declarationsTransformer?.withRegularClass(firClass) {
transformer.firResolveContextCollector?.addDeclarationContext(firClass, transformer.context)
action()
firClass
}
@@ -103,10 +103,10 @@ private class LLFirAnnotationArgumentsTargetResolver(
internal fun LLFirAbstractBodyTargetResolver.transformAnnotations(target: FirElementWithResolveState) {
when {
target is FirRegularClass -> {
target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent)
target.transformTypeParameters(transformer.declarationsTransformer, ResolutionMode.ContextIndependent)
target.transformSuperTypeRefs(transformer.declarationsTransformer, ResolutionMode.ContextIndependent)
target is FirRegularClass -> transformer.declarationsTransformer?.let { declarationsTransformer ->
target.transformAnnotations(declarationsTransformer, ResolutionMode.ContextIndependent)
target.transformTypeParameters(declarationsTransformer, ResolutionMode.ContextIndependent)
target.transformSuperTypeRefs(declarationsTransformer, ResolutionMode.ContextIndependent)
}
target.isRegularDeclarationWithAnnotation -> {
@@ -483,6 +483,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/inlineDeprecationsOnImplicitCalls.kt");
}
@Test
@TestMetadata("invalidTargetCrashesCompiler.kt")
public void testInvalidTargetCrashesCompiler() throws Exception {
runTest("compiler/testData/diagnostics/tests/invalidTargetCrashesCompiler.kt");
}
@Test
@TestMetadata("invisibleClassInsteadOfFun.kt")
public void testInvisibleClassInsteadOfFun() throws Exception {
@@ -483,6 +483,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/inlineDeprecationsOnImplicitCalls.kt");
}
@Test
@TestMetadata("invalidTargetCrashesCompiler.kt")
public void testInvalidTargetCrashesCompiler() throws Exception {
runTest("compiler/testData/diagnostics/tests/invalidTargetCrashesCompiler.kt");
}
@Test
@TestMetadata("invisibleClassInsteadOfFun.kt")
public void testInvisibleClassInsteadOfFun() throws Exception {