diff --git a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractAdditionalStubInfoKnmTest.kt b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractAdditionalStubInfoKnmTest.kt index 2794ec7824e..4018ca91be9 100644 --- a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractAdditionalStubInfoKnmTest.kt +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractAdditionalStubInfoKnmTest.kt @@ -8,25 +8,15 @@ package org.jetbrains.kotlin.analysis.decompiler.konan import com.intellij.util.indexing.FileContentImpl import org.jetbrains.kotlin.analysis.decompiler.stub.files.extractAdditionalStubInfo import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.kotlin.test.directives.model.Directive -import org.jetbrains.kotlin.test.directives.model.DirectiveApplicability -import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer import java.nio.file.Path import kotlin.io.path.name abstract class AbstractAdditionalStubInfoKnmTest : AbstractDecompiledKnmFileTest() { - private object Directives : SimpleDirectivesContainer() { - val KNM_K2_IGNORE by directive( - description = "Ignore test for KNM files with K2 K/N Decompiler", - applicability = DirectiveApplicability.Global, - ) - } - - override val ignoreDirective: Directive - get() = Directives.KNM_K2_IGNORE + override val knmTestSupport: KnmTestSupport + get() = K2KnmTestSupport override fun doTest(testDirectoryPath: Path) { - val stubBuilder = K2KotlinNativeMetadataDecompiler().stubBuilder + val stubBuilder = knmTestSupport.createDecompiler().stubBuilder val knmFiles = compileToKnmFiles(testDirectoryPath) val knmFile = knmFiles.singleOrNull { "root_package" !in it.path } ?: error("Expected a single non-root .knm file, but received:${System.lineSeparator()}" + diff --git a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmFileTest.kt b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmFileTest.kt index 2b7040a0509..6c1614e99ba 100644 --- a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmFileTest.kt +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmFileTest.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION_WITH_DOT import org.jetbrains.kotlin.test.* -import org.jetbrains.kotlin.test.directives.model.Directive import org.jetbrains.kotlin.test.util.KtTestUtil import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File @@ -25,7 +24,7 @@ import kotlin.io.path.absolutePathString import kotlin.io.path.extension abstract class AbstractDecompiledKnmFileTest : KotlinTestWithEnvironment() { - abstract val ignoreDirective: Directive + abstract val knmTestSupport: KnmTestSupport protected abstract fun doTest(testDirectoryPath: Path) @@ -90,7 +89,7 @@ abstract class AbstractDecompiledKnmFileTest : KotlinTestWithEnvironment() { private fun isTestIgnored(testDirectory: Path): Boolean { val mainKotlinFile = findMainTestKotlinFile(testDirectory).toFile() - return InTextDirectivesUtils.isDirectiveDefined(mainKotlinFile.readText(), "// ${ignoreDirective.name}") + return InTextDirectivesUtils.isDirectiveDefined(mainKotlinFile.readText(), "// ${knmTestSupport.ignoreDirective.name}") } private fun withKnmIgnoreDirective(testDirectory: Path, block: () -> Unit) { @@ -103,6 +102,6 @@ abstract class AbstractDecompiledKnmFileTest : KotlinTestWithEnvironment() { else throw e } - if (isIgnored) error("The test is passing. Please, remove the `// ${ignoreDirective.name}` directive") + if (isIgnored) error("The test is passing. Please, remove the `// ${knmTestSupport.ignoreDirective.name}` directive") } } diff --git a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmStubConsistencyTest.kt b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmStubConsistencyTest.kt index de5c115ddf6..96ae3c351ce 100644 --- a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmStubConsistencyTest.kt +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractDecompiledKnmStubConsistencyTest.kt @@ -5,67 +5,25 @@ package org.jetbrains.kotlin.analysis.decompiler.konan -import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFile -import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem import com.intellij.psi.PsiManager import com.intellij.util.indexing.FileContentImpl -import org.jetbrains.kotlin.analysis.decompiler.stub.files.findMainTestKotlinFile import org.jetbrains.kotlin.analysis.decompiler.stub.files.serializeToString -import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.library.KLIB_METADATA_FILE_EXTENSION_WITH_DOT import org.jetbrains.kotlin.psi.stubs.elements.KtFileStubBuilder -import org.jetbrains.kotlin.test.* -import org.jetbrains.kotlin.test.directives.model.Directive -import org.jetbrains.kotlin.test.directives.model.DirectiveApplicability -import org.jetbrains.kotlin.test.directives.model.SimpleDirective -import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer -import org.jetbrains.kotlin.test.util.KtTestUtil -import org.jetbrains.kotlin.utils.addIfNotNull import org.junit.Assert -import java.io.File -import java.nio.file.Files import java.nio.file.Path -import java.nio.file.Paths -import java.util.stream.Collectors -import kotlin.io.path.absolutePathString -import kotlin.io.path.extension abstract class AbstractDecompiledKnmStubConsistencyFe10Test : AbstractDecompiledKnmStubConsistencyTest() { - private object Directives : SimpleDirectivesContainer() { - val KNM_FE10_IGNORE by directive( - description = "Ignore test for KNM files with FE10 K/N Decompiler", - applicability = DirectiveApplicability.Global, - ) - } - - override val ignoreDirective: SimpleDirective - get() = Directives.KNM_FE10_IGNORE - - override fun createDecompiler(): KlibMetadataDecompiler<*> { - return KotlinNativeMetadataDecompiler() - } + override val knmTestSupport: KnmTestSupport + get() = Fe10KnmTestSupport } abstract class AbstractDecompiledKnmStubConsistencyK2Test : AbstractDecompiledKnmStubConsistencyTest() { - private object Directives : SimpleDirectivesContainer() { - val KNM_K2_IGNORE by directive( - description = "Ignore test for KNM files with K2 K/N Decompiler", - applicability = DirectiveApplicability.Global, - ) - } - - override val ignoreDirective: SimpleDirective - get() = Directives.KNM_K2_IGNORE - - override fun createDecompiler(): KlibMetadataDecompiler<*> { - return K2KotlinNativeMetadataDecompiler() - } + override val knmTestSupport: KnmTestSupport + get() = K2KnmTestSupport } abstract class AbstractDecompiledKnmStubConsistencyTest : AbstractDecompiledKnmFileTest() { - abstract fun createDecompiler(): KlibMetadataDecompiler<*> override fun doTest(testDirectoryPath: Path) { val files = compileToKnmFiles(testDirectoryPath) @@ -76,7 +34,8 @@ abstract class AbstractDecompiledKnmStubConsistencyTest : AbstractDecompiledKnmF } private fun checkKnmStubConsistency(knmFile: VirtualFile) { - val stubTreeBinaryFile = createDecompiler().stubBuilder.buildFileStub(FileContentImpl.createByFile(knmFile, environment.project))!! + val decompiler = knmTestSupport.createDecompiler() + val stubTreeBinaryFile = decompiler.stubBuilder.buildFileStub(FileContentImpl.createByFile(knmFile, environment.project))!! val fileViewProviderForDecompiledFile = K2KotlinNativeMetadataDecompiler().createFileViewProvider( knmFile, PsiManager.getInstance(project), physical = false, @@ -84,7 +43,7 @@ abstract class AbstractDecompiledKnmStubConsistencyTest : AbstractDecompiledKnmF val stubTreeForDecompiledFile = KtFileStubBuilder().buildStubTree( KlibDecompiledFile(fileViewProviderForDecompiledFile) { virtualFile -> - createDecompiler().buildDecompiledTextForTests(virtualFile) + decompiler.buildDecompiledTextForTests(virtualFile) } ) diff --git a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/KnmTestSupport.kt b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/KnmTestSupport.kt new file mode 100644 index 00000000000..690e8655028 --- /dev/null +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/KnmTestSupport.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.decompiler.konan + +import org.jetbrains.kotlin.test.directives.model.DirectiveApplicability +import org.jetbrains.kotlin.test.directives.model.SimpleDirective +import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer + +interface KnmTestSupport { + val ignoreDirective: SimpleDirective + fun createDecompiler(): KlibMetadataDecompiler<*> +} + +object Fe10KnmTestSupport : KnmTestSupport { + private object Directives : SimpleDirectivesContainer() { + val KNM_FE10_IGNORE by directive( + description = "Ignore test for KNM files with FE10 K/N Decompiler", + applicability = DirectiveApplicability.Global, + ) + } + + override val ignoreDirective: SimpleDirective + get() = Directives.KNM_FE10_IGNORE + + override fun createDecompiler(): KlibMetadataDecompiler<*> { + return KotlinNativeMetadataDecompiler() + } +} + +object K2KnmTestSupport : KnmTestSupport { + private object Directives : SimpleDirectivesContainer() { + val KNM_K2_IGNORE by directive( + description = "Ignore test for KNM files with K2 K/N Decompiler", + applicability = DirectiveApplicability.Global, + ) + } + + override val ignoreDirective: SimpleDirective + get() = Directives.KNM_K2_IGNORE + + override fun createDecompiler(): KlibMetadataDecompiler<*> { + return K2KotlinNativeMetadataDecompiler() + } +}