[FIR] Prevent compiler crash on lambdas in annotations
^KT-59110 Fixed
This commit is contained in:
committed by
Space Team
parent
31f21d8593
commit
61d2e338a4
+4
-10
@@ -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
|
||||
}
|
||||
|
||||
+4
-4
@@ -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 -> {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
+6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user