diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt index f74a7821b5e..20fcb2778c2 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractFirMultiModuleLazyResolveTest.kt @@ -5,12 +5,14 @@ package org.jetbrains.kotlin.idea.fir.low.level.api +import com.google.gson.JsonElement +import com.google.gson.JsonObject import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiManager -import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir import org.jetbrains.kotlin.idea.fir.low.level.api.api.getResolveState +import org.jetbrains.kotlin.idea.jsonUtils.getString import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.util.sourceRoots import org.jetbrains.kotlin.psi.KtFile @@ -23,7 +25,7 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest() "${KotlinTestUtils.getHomeDirectory()}/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/multiModuleLazyResolve/" fun doTest(path: String) { - val testStructure = TestProjectStructureReader.read(Paths.get(path)) + val testStructure = MultiModuleTestProjectStructure.fromTestProjectStructure(TestProjectStructureReader.read(Paths.get(path))) val modulesByNames = testStructure.modules.associate { moduleData -> moduleData.name to module(moduleData.name) } @@ -55,3 +57,40 @@ abstract class AbstractFirMultiModuleLazyResolveTest : AbstractMultiModuleTest() } } } + +private data class FileToResolve(val moduleName: String, val relativeFilePath: String) { + val filePath get() = "$moduleName/$relativeFilePath" + + companion object { + fun parse(json: JsonElement): FileToResolve { + require(json is JsonObject) + return FileToResolve( + moduleName = json.getString("module"), + relativeFilePath = json.getString("file") + ) + } + } +} + +private data class MultiModuleTestProjectStructure( + val modules: List, + val fileToResolve: FileToResolve, + val fails: Boolean +) { + companion object { + fun fromTestProjectStructure(testProjectStructure: TestProjectStructure): MultiModuleTestProjectStructure { + val json = testProjectStructure.json + + val fails = if (json.has(FAILS_FIELD)) json.get(FAILS_FIELD).asBoolean else false + val fileToResolve = FileToResolve.parse(json.getAsJsonObject("fileToResolve")) + + return MultiModuleTestProjectStructure( + testProjectStructure.modules, + fileToResolve, + fails + ) + } + + private const val FAILS_FIELD = "fails" + } +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/TestProjectStructure.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/TestProjectStructure.kt index a40c1bb153b..0cdb8141b1e 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/TestProjectStructure.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/TestProjectStructure.kt @@ -13,46 +13,22 @@ import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.idea.jsonUtils.getString import java.nio.file.Path -sealed class TestProjectStructure { - abstract val modules: List - abstract val fileToResolve: FileToResolve - abstract val fails: Boolean - +internal data class TestProjectStructure( + val modules: List, + val json: JsonObject, +) { companion object { fun parse(json: JsonElement): TestProjectStructure { require(json is JsonObject) - val fails = if (json.has(FAILS_FIELD)) json.get(FAILS_FIELD).asBoolean else false - return MultiModuleTestProjectStructure( - json.getAsJsonArray("modules").map { TestProjectModule.parse(it) }, - FileToResolve.parse(json.getAsJsonObject("fileToResolve")), - fails - ) - } - - private const val FAILS_FIELD = "fails" - } -} - -data class FileToResolve(val moduleName: String, val relativeFilePath: String) { - val filePath get() = "$moduleName/$relativeFilePath" - - companion object { - fun parse(json: JsonElement): FileToResolve { - require(json is JsonObject) - return FileToResolve( - moduleName = json.getString("module"), - relativeFilePath = json.getString("file") + return TestProjectStructure( + json.getAsJsonArray("modules").map(TestProjectModule::parse), + json, ) } } } -data class MultiModuleTestProjectStructure( - override val modules: List, - override val fileToResolve: FileToResolve, - override val fails: Boolean -) : TestProjectStructure() data class TestProjectModule(val name: String, val dependsOnModules: List) { companion object { @@ -71,7 +47,7 @@ data class TestProjectModule(val name: String, val dependsOnModules: List