From 54a004ef1afc9a3b97e89a098ac9e7ae60f4c99a Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 20 Dec 2022 17:01:53 +0200 Subject: [PATCH] [FIR] Fix behavior of FirCompilerLazyDeclarationResolverWithPhaseChecking in tests 1. There was an incorrect filtration of failures if FIR_DISABLE_LAZY_RESOLVE_CHECKS directive was present 2. `FirDumpHandler` potentially can call lazy resolution in presence of compiler plugins, so we should call `startResolvingPhase`/`finishResolvingPhase` in it before traversing the tree --- .../fir/DisableLazyResolveChecksAfterAnalysisChecker.kt | 3 ++- .../kotlin/test/frontend/fir/handlers/FirDumpHandler.kt | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/DisableLazyResolveChecksAfterAnalysisChecker.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/DisableLazyResolveChecksAfterAnalysisChecker.kt index b579c222ad2..805f599ec59 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/DisableLazyResolveChecksAfterAnalysisChecker.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/DisableLazyResolveChecksAfterAnalysisChecker.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.test.frontend.fir import org.jetbrains.kotlin.test.WrappedException import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives +import org.jetbrains.kotlin.test.frontend.fir.handlers.FirResolveContractViolationErrorHandler import org.jetbrains.kotlin.test.model.AfterAnalysisChecker import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.moduleStructure @@ -53,7 +54,7 @@ class DisableLazyResolveChecksAfterAnalysisChecker( override fun suppressIfNeeded(failedAssertions: List): List { return if (isDisableLazyResolveDirectivePresent()) { - failedAssertions.filter { it.cause is TestWithDisableLazyResolveDirectivePassesException } + failedAssertions.filterNot { it is WrappedException.FromHandler && it.handler is FirResolveContractViolationErrorHandler } } else { failedAssertions } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirDumpHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirDumpHandler.kt index b937379d2a3..e0105276752 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirDumpHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirDumpHandler.kt @@ -8,11 +8,13 @@ package org.jetbrains.kotlin.test.frontend.fir.handlers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.createFilesWithGeneratedDeclarations import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.extensions.generatedMembers import org.jetbrains.kotlin.fir.extensions.generatedNestedClassifiers import org.jetbrains.kotlin.fir.renderer.FirClassMemberRenderer import org.jetbrains.kotlin.fir.renderer.FirPackageDirectiveRenderer import org.jetbrains.kotlin.fir.renderer.FirRenderer +import org.jetbrains.kotlin.fir.symbols.lazyDeclarationResolver import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact @@ -38,6 +40,7 @@ class FirDumpHandler( addAll(firFiles.values) addAll(info.session.createFilesWithGeneratedDeclarations()) } + info.session.lazyDeclarationResolver.startResolvingPhase(FirResolvePhase.BODY_RESOLVE) val renderer = FirRenderer( builder = builderForModule, @@ -47,6 +50,7 @@ class FirDumpHandler( allFiles.forEach { renderer.renderElementAsString(it) } + info.session.lazyDeclarationResolver.finishResolvingPhase(FirResolvePhase.BODY_RESOLVE) } override fun processAfterAllModules(someAssertionWasFailed: Boolean) {