[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
This commit is contained in:
Dmitriy Novozhilov
2022-12-20 17:01:53 +02:00
committed by Space Team
parent c9ba9b995e
commit 54a004ef1a
2 changed files with 6 additions and 1 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.test.frontend.fir
import org.jetbrains.kotlin.test.WrappedException import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.directives.FirDiagnosticsDirectives 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.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.moduleStructure import org.jetbrains.kotlin.test.services.moduleStructure
@@ -53,7 +54,7 @@ class DisableLazyResolveChecksAfterAnalysisChecker(
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> { override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
return if (isDisableLazyResolveDirectivePresent()) { return if (isDisableLazyResolveDirectivePresent()) {
failedAssertions.filter { it.cause is TestWithDisableLazyResolveDirectivePassesException } failedAssertions.filterNot { it is WrappedException.FromHandler && it.handler is FirResolveContractViolationErrorHandler }
} else { } else {
failedAssertions failedAssertions
} }
@@ -8,11 +8,13 @@ package org.jetbrains.kotlin.test.frontend.fir.handlers
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.createFilesWithGeneratedDeclarations import org.jetbrains.kotlin.fir.backend.createFilesWithGeneratedDeclarations
import org.jetbrains.kotlin.fir.declarations.FirRegularClass 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.generatedMembers
import org.jetbrains.kotlin.fir.extensions.generatedNestedClassifiers import org.jetbrains.kotlin.fir.extensions.generatedNestedClassifiers
import org.jetbrains.kotlin.fir.renderer.FirClassMemberRenderer import org.jetbrains.kotlin.fir.renderer.FirClassMemberRenderer
import org.jetbrains.kotlin.fir.renderer.FirPackageDirectiveRenderer import org.jetbrains.kotlin.fir.renderer.FirPackageDirectiveRenderer
import org.jetbrains.kotlin.fir.renderer.FirRenderer 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.FirDiagnosticsDirectives
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
@@ -38,6 +40,7 @@ class FirDumpHandler(
addAll(firFiles.values) addAll(firFiles.values)
addAll(info.session.createFilesWithGeneratedDeclarations()) addAll(info.session.createFilesWithGeneratedDeclarations())
} }
info.session.lazyDeclarationResolver.startResolvingPhase(FirResolvePhase.BODY_RESOLVE)
val renderer = FirRenderer( val renderer = FirRenderer(
builder = builderForModule, builder = builderForModule,
@@ -47,6 +50,7 @@ class FirDumpHandler(
allFiles.forEach { allFiles.forEach {
renderer.renderElementAsString(it) renderer.renderElementAsString(it)
} }
info.session.lazyDeclarationResolver.finishResolvingPhase(FirResolvePhase.BODY_RESOLVE)
} }
override fun processAfterAllModules(someAssertionWasFailed: Boolean) { override fun processAfterAllModules(someAssertionWasFailed: Boolean) {