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 new file mode 100644 index 00000000000..2794ec7824e --- /dev/null +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AbstractAdditionalStubInfoKnmTest.kt @@ -0,0 +1,42 @@ +/* + * 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 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 fun doTest(testDirectoryPath: Path) { + val stubBuilder = K2KotlinNativeMetadataDecompiler().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()}" + + knmFiles.joinToString(separator = System.lineSeparator()) { it.path } + ) + + val stub = stubBuilder.buildFileStub(FileContentImpl.createByFile(knmFile, environment.project))!! + KotlinTestUtils.assertEqualsToFile( + testDirectoryPath.resolve("${testDirectoryPath.name}.txt"), + extractAdditionalStubInfo(stub) + ) + } +} 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 91401719fb5..2b7040a0509 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 @@ -29,6 +29,14 @@ abstract class AbstractDecompiledKnmFileTest : KotlinTestWithEnvironment() { protected abstract fun doTest(testDirectoryPath: Path) + override fun setUp() { + super.setUp() + + environment.projectEnvironment.environment.registerFileType( + KlibMetaFileType, KlibMetaFileType.defaultExtension + ) + } + override fun createEnvironment(): KotlinCoreEnvironment { return KotlinCoreEnvironment.createForTests( ApplicationEnvironmentDisposer.ROOT_DISPOSABLE, 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 3ac2454f98d..de5c115ddf6 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 @@ -67,14 +67,6 @@ abstract class AbstractDecompiledKnmStubConsistencyK2Test : AbstractDecompiledKn abstract class AbstractDecompiledKnmStubConsistencyTest : AbstractDecompiledKnmFileTest() { abstract fun createDecompiler(): KlibMetadataDecompiler<*> - override fun setUp() { - super.setUp() - - environment.projectEnvironment.environment.registerFileType( - KlibMetaFileType, KlibMetaFileType.defaultExtension - ) - } - override fun doTest(testDirectoryPath: Path) { val files = compileToKnmFiles(testDirectoryPath) diff --git a/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AdditionalStubInfoKnmTestGenerated.java b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AdditionalStubInfoKnmTestGenerated.java new file mode 100644 index 00000000000..acff628c577 --- /dev/null +++ b/analysis/decompiled/decompiler-native/tests/org/jetbrains/kotlin/analysis/decompiler/konan/AdditionalStubInfoKnmTestGenerated.java @@ -0,0 +1,68 @@ +/* + * 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 com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo") +@TestDataPath("$PROJECT_ROOT") +public class AdditionalStubInfoKnmTestGenerated extends AbstractAdditionalStubInfoKnmTest { + @Test + public void testAllFilesPresentInAdditionalClsStubInfo() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo"), Pattern.compile("^([^\\.]+)$"), null, false); + } + + @Test + @TestMetadata("AnnotatedFlexibleTypes") + public void testAnnotatedFlexibleTypes() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotatedFlexibleTypes/"); + } + + @Test + @TestMetadata("AnnotationValues") + public void testAnnotationValues() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotationValues/"); + } + + @Test + @TestMetadata("Contracts") + public void testContracts() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/"); + } + + @Test + @TestMetadata("OuterClassesWithFlexibleArgs") + public void testOuterClassesWithFlexibleArgs() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/OuterClassesWithFlexibleArgs/"); + } + + @Test + @TestMetadata("ParameterName") + public void testParameterName() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/ParameterName/"); + } + + @Test + @TestMetadata("PropertyInitializer") + public void testPropertyInitializer() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/PropertyInitializer/"); + } + + @Test + @TestMetadata("TypeParametersInFlexibleTypes") + public void testTypeParametersInFlexibleTypes() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/TypeParametersInFlexibleTypes/"); + } +} diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotatedFlexibleTypes/AnnotatedFlexibleTypes.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotatedFlexibleTypes/AnnotatedFlexibleTypes.kt index fd431409026..c5e011899f1 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotatedFlexibleTypes/AnnotatedFlexibleTypes.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotatedFlexibleTypes/AnnotatedFlexibleTypes.kt @@ -1,3 +1,6 @@ +/* Java interop */ +// KNM_K2_IGNORE + package test public class AnnotatedFlexibleTypes(val javaClass: d.JavaClass) { diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotationValues/AnnotationValues.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotationValues/AnnotationValues.kt index 91075a60deb..4ceb49d6096 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotationValues/AnnotationValues.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/AnnotationValues/AnnotationValues.kt @@ -1,3 +1,7 @@ +/* K2 is skipped because of the test data: multiple KNM parts are produced */ +// KNM_K2_IGNORE + + package test import test.E.E1 diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt index d3216e07f7b..9b5b0b43b35 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt @@ -1,3 +1,5 @@ +/* KTIJ-28668 */ +// KNM_K2_IGNORE // JVM_FILE_NAME: ContractsKt @file:OptIn(ExperimentalContracts::class) diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/OuterClassesWithFlexibleArgs/OuterClassesWithFlexibleArgs.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/OuterClassesWithFlexibleArgs/OuterClassesWithFlexibleArgs.kt index e20120434a2..b507d026c84 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/OuterClassesWithFlexibleArgs/OuterClassesWithFlexibleArgs.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/OuterClassesWithFlexibleArgs/OuterClassesWithFlexibleArgs.kt @@ -1,3 +1,6 @@ +/* Java interop */ +// KNM_K2_IGNORE + package test public class OuterClassesWithFlexibleArgs(k: K, l: L) { diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/PropertyInitializer/PropertyInitializer.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/PropertyInitializer/PropertyInitializer.kt index b8a5fc3a937..293063de94a 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/PropertyInitializer/PropertyInitializer.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/PropertyInitializer/PropertyInitializer.kt @@ -1,3 +1,5 @@ +// KNM_K2_IGNORE + package test import kotlin.reflect.KClass diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/TypeParametersInFlexibleTypes/TypeParametersInFlexibleTypes.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/TypeParametersInFlexibleTypes/TypeParametersInFlexibleTypes.kt index c54ffde41fd..f042e1c5a9e 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/TypeParametersInFlexibleTypes/TypeParametersInFlexibleTypes.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/TypeParametersInFlexibleTypes/TypeParametersInFlexibleTypes.kt @@ -1,3 +1,6 @@ +/* Java interop */ +// KNM_K2_IGNORE + package test public class TypeParametersInFlexibleTypes(val javaClass: d.JavaClass, val t: D & Any) { diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/decompiled.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/decompiled.kt index bb19f3dda01..2717430cfea 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/decompiled.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/decompiled.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.generators.tests.analysis.api +import org.jetbrains.kotlin.analysis.decompiler.konan.AbstractAdditionalStubInfoKnmTest import org.jetbrains.kotlin.analysis.decompiler.konan.AbstractDecompiledKnmStubConsistencyFe10Test import org.jetbrains.kotlin.analysis.decompiler.konan.AbstractDecompiledKnmStubConsistencyK2Test import org.jetbrains.kotlin.analysis.decompiler.psi.AbstractByDecompiledPsiStubBuilderK2CompilerTest @@ -66,4 +67,13 @@ internal fun TestGroupSuite.generateDecompiledTests() { model("clsFileStubBuilder", extension = null, recursive = false) } } + + testGroup( + "analysis/decompiled/decompiler-native/tests", + "analysis/decompiled/decompiler-to-file-stubs/testData", + ) { + testClass { + model("additionalClsStubInfo", extension = null, recursive = false) + } + } } \ No newline at end of file