From 044c0adae75d2b5f2334a8808c2da88e8a8bdedb Mon Sep 17 00:00:00 2001 From: Artem Kobzar Date: Wed, 19 Jul 2023 15:57:56 +0000 Subject: [PATCH] [K/JS] Implement an incremental compilation for the per-file granularity --- .../kotlin/ir/backend/js/ic/CacheUpdater.kt | 4 +- .../ir/backend/js/ic/IncrementalCache.kt | 4 +- .../ir/backend/js/ic/JsExecutableProducer.kt | 40 +- .../ir/backend/js/ic/JsMultiArtifactCache.kt | 94 ++++ .../kotlin/ir/backend/js/ic/JsPerFileCache.kt | 231 ++++++++ ...ultiModuleCache.kt => JsPerModuleCache.kt} | 84 +-- .../transformers/irToJs/CompilationOutputs.kt | 61 ++- .../irToJs/IrModuleToJsTransformer.kt | 50 +- .../irToJs/JsIrProgramFragment.kt | 17 +- .../backend/js/transformers/irToJs/Merger.kt | 2 +- .../irToJs/ModuleFragmentToExternalName.kt | 32 +- .../kotlin/ir/backend/js/utils/IrJsUtils.kt | 2 + .../serialization/JsIrAstDeserializer.kt | 2 +- .../utils/serialization/JsIrAstSerializer.kt | 1 + .../backend/common/serialization/CityHash.kt | 3 + .../org/jetbrains/kotlin/codegen/TestModel.kt | 36 +- .../generators/tests/GenerateJsTests.kt | 29 +- .../incremental/AbstractInvalidationTest.kt | 68 ++- .../FirAbstractInvalidationTest.kt | 9 +- .../incremental/IrAbstractInvalidationTest.kt | 45 +- ...sFirInvalidationPerFileTestGenerated.java} | 20 +- ...FirInvalidationPerModuleTestGenerated.java | 501 ++++++++++++++++++ ...rES6InvalidationPerFileTestGenerated.java} | 20 +- ...ES6InvalidationPerModuleTestGenerated.java | 501 ++++++++++++++++++ ...JsIrInvalidationPerFileTestGenerated.java} | 20 +- ...validationPerFileWithPLTestGenerated.java} | 2 +- ...sIrInvalidationPerModuleTestGenerated.java | 501 ++++++++++++++++++ ...alidationPerModuleWithPLTestGenerated.java | 75 +++ .../addUpdateRemoveDependentFile/project.info | 21 +- .../project.info | 18 +- .../circleExportsUpdate/project.info | 6 +- .../circleInlineImportsUpdate/project.info | 9 +- .../invalidation/class/project.info | 6 +- .../classFunctionsAndFields/project.info | 21 +- .../companionFunction/project.info | 6 +- .../companionInlineFunction/project.info | 12 +- .../companionProperties/project.info | 38 +- .../companionWithStdLibCall/project.info | 9 +- .../invalidation/constVals/project.fir.info | 9 +- .../invalidation/constVals/project.info | 12 +- .../crossModuleReferences/project.info | 12 +- .../eagerInitialization/project.info | 6 +- .../invalidation/enum/project.info | 12 +- .../enumsInInlineFunctions/project.info | 13 +- .../exceptionsFromInlineFunction/project.info | 24 +- .../exportsThroughInlineFunction/project.info | 15 +- .../project.info | 27 +- .../fakeOverrideInheritance/project.info | 24 +- .../fakeOverrideInlineExtension/project.info | 6 +- .../fakeOverrideInlineFunction/project.info | 9 +- .../fakeOverrideInlineProperty/project.info | 6 +- .../project.info | 30 +- .../invalidation/fastPath1/project.info | 6 +- .../invalidation/fastPath2/project.info | 3 +- .../friendDependency/project.info | 21 +- .../functionDefaultParams/project.info | 12 +- .../functionSignature/project.info | 12 +- .../functionTypeInterface/project.info | 28 +- .../functionTypeInterfaceReflect/project.info | 17 +- .../genericFunctions/project.info | 6 +- .../genericInlineFunctions/project.info | 12 +- .../gettersAndSettersInlining/project.info | 12 +- .../inlineBecomeNonInline/project.info | 12 +- .../inlineFunctionAnnotations/project.info | 17 +- .../project.info | 17 +- .../inlineFunctionAsParam/project.info | 9 +- .../inlineFunctionCircleUsage/project.info | 9 +- .../inlineFunctionDefaultParams/project.info | 9 +- .../inlineFunctionWithObject/project.info | 6 +- .../interfaceOpenMethods/project.info | 18 +- .../project.info | 18 +- .../interfaceSuperUsage/project.info | 33 +- .../interfaceWithDefaultParams/project.info | 24 +- .../invalidation/jsCode/project.info | 9 +- .../jsCodeWithConstString/project.fir.info | 34 ++ .../jsCodeWithConstString/project.info | 20 +- .../invalidation/jsExport/project.info | 17 +- .../jsModuleAnnotation/project.info | 9 +- .../languageVersionSettings/project.info | 15 +- .../localInlineFunction/project.info | 6 +- .../project.info | 21 +- .../mainModuleInvalidation/project.info | 6 +- .../moveAndModifyInlineFunction/project.info | 6 +- .../js-module-a-new.mjs | 1 + .../js-module-a.mjs | 1 + .../js-module-b-new.mjs | 1 + .../js-module-b.mjs | 1 + .../js-module-c-new.mjs | 1 + .../js-module-c.mjs | 1 + .../lib1/JsModuleA.0.kt | 3 + .../lib1/JsModuleA.1.kt | 1 + .../lib1/JsModuleA.4.kt | 3 + .../lib1/JsModuleB.0.kt | 1 + .../lib1/JsModuleB.1.kt | 3 + .../lib1/JsModuleB.2.kt | 3 + .../lib1/demo.0.kt | 1 + .../lib1/demo.3.kt | 1 + .../lib1/module.info | 32 ++ .../lib2/JsModuleC.5.kt | 3 + .../lib2/JsModuleC.6.kt | 3 + .../lib2/module.info | 28 + .../lib2/test.0.kt | 1 + .../lib2/test.3.kt | 1 + .../main/m.kt | 7 + .../main/module.info | 5 + .../project.info | 25 + .../project.info | 10 +- .../moveFilesBetweenModules/project.info | 13 +- .../project.info | 9 +- .../invalidation/nestedClass/project.info | 24 +- .../nonInlineBecomeInline/project.info | 12 +- .../project.info | 29 +- .../privateInlineFunction1/project.info | 6 +- .../project.info | 21 +- .../invalidation/removeFile/project.info | 9 +- .../invalidation/removeModule/project.info | 6 +- .../removeUnusedFile/project.info | 5 +- .../invalidation/renameFile/project.info | 9 +- .../invalidation/renameModule/project.info | 9 +- .../invalidation/simple/project.info | 6 +- .../invalidation/splitJoinModule/project.info | 15 +- .../suspendFunctions/project.info | 9 +- .../project.info | 7 +- .../toplevelProperties/project.info | 59 ++- .../transitiveInlineFunction/project.info | 9 +- .../lib1/l1.0.4.kt | 0 .../typeScriptExportsPerFile/lib1/l1.1.d.ts | 2 + .../lib1/l1.1.kt | 0 .../typeScriptExportsPerFile/lib1/l1.2.d.ts | 2 + .../lib1/l1.2.kt | 0 .../typeScriptExportsPerFile/lib1/module.info | 20 + .../lib2/l2.0.kt | 0 .../typeScriptExportsPerFile/lib2/l2.3.d.ts | 6 + .../lib2/l2.3.kt | 0 .../typeScriptExportsPerFile/lib2/l2.5.d.ts | 6 + .../lib2/l2.5.kt | 0 .../typeScriptExportsPerFile/lib2/l2.6.d.ts | 6 + .../lib2/l2.6.kt | 0 .../typeScriptExportsPerFile/lib2/module.info | 30 ++ .../main/m.d.ts} | 0 .../main/m.kt | 0 .../typeScriptExportsPerFile/main/module.info | 25 + .../typeScriptExportsPerFile/project.info | 22 + .../typeScriptExportsPerModule/lib1/l1.0.4.kt | 1 + .../typeScriptExportsPerModule/lib1/l1.1.kt | 2 + .../typeScriptExportsPerModule/lib1/l1.2.kt | 3 + .../lib1/module.info | 0 .../typeScriptExportsPerModule/lib2/l2.0.kt | 4 + .../typeScriptExportsPerModule/lib2/l2.3.kt | 5 + .../typeScriptExportsPerModule/lib2/l2.5.kt | 6 + .../typeScriptExportsPerModule/lib2/l2.6.kt | 6 + .../lib2/module.info | 0 .../typeScriptExportsPerModule/main/m.0.d.ts | 2 + .../main/m.1.d.ts | 0 .../main/m.2.d.ts | 0 .../main/m.3.d.ts | 0 .../main/m.4.d.ts | 0 .../main/m.5.d.ts | 0 .../main/m.6.d.ts | 0 .../typeScriptExportsPerModule/main/m.kt | 7 + .../main/module.info | 0 .../project.info | 14 +- .../project.info | 9 +- .../invalidation/updateExports/project.info | 33 +- .../project.info | 33 +- .../invalidation/variance/project.info | 9 +- .../changeFunctionSignature/project.info | 24 +- .../interfaceBecomeClass/project.info | 21 +- .../removeFunction/project.info | 9 +- .../removeFunctionFromBlock/project.info | 13 +- .../removeFunctionFromChainCall/project.info | 21 +- .../removeFunctionFromElvis/project.info | 17 +- .../removeFunctionFromInline/project.info | 9 +- .../removeInlineFunction/project.info | 17 +- .../js-ir-minimal-for-test/build.gradle.kts | 2 +- libraries/stdlib/js/src/kotlin/Comparator.kt | 2 +- .../src/kotlin/{grouping.kt => GroupingJs.kt} | 1 + .../src/kotlin/{numbers.kt => NumbersJs.kt} | 0 .../collections/AbstractMutableCollection.kt | 2 + .../kotlin/collections/AbstractMutableList.kt | 1 + .../js/src/kotlin/collections/ArrayList.kt | 2 + .../stdlib/js/src/kotlin/reflect/KCallable.kt | 2 + .../stdlib/js/src/kotlin/reflect/KClass.kt | 2 + .../stdlib/js/src/kotlin/reflect/KProperty.kt | 2 + .../{DurationUnit.kt => DurationUnitJs.kt} | 0 185 files changed, 3530 insertions(+), 513 deletions(-) create mode 100644 compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiArtifactCache.kt create mode 100644 compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerFileCache.kt rename compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/{JsMultiModuleCache.kt => JsPerModuleCache.kt} (57%) rename js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/{JsIrInvalidationTestGenerated.java => JsFirInvalidationPerFileTestGenerated.java} (96%) create mode 100644 js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java rename js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/{JsIrES6InvalidationTestGenerated.java => JsIrES6InvalidationPerFileTestGenerated.java} (96%) create mode 100644 js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java rename js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/{JsFirInvalidationTestGenerated.java => JsIrInvalidationPerFileTestGenerated.java} (96%) rename js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/{JsIrInvalidationWithPLTestGenerated.java => JsIrInvalidationPerFileWithPLTestGenerated.java} (96%) create mode 100644 js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java create mode 100644 js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleWithPLTestGenerated.java create mode 100644 js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.fir.info create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a-new.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b-new.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c-new.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c.mjs create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.0.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.1.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.4.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.0.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.1.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.2.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.0.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.3.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/module.info create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.5.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.6.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/module.info create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.0.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.3.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/m.kt create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/module.info create mode 100644 js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/project.info rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib1/l1.0.4.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib1/l1.1.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib1/l1.2.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/module.info rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib2/l2.0.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib2/l2.3.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib2/l2.5.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/lib2/l2.6.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/module.info rename js/js.translator/testData/incremental/invalidation/{typeScriptExports/main/m.0.d.ts => typeScriptExportsPerFile/main/m.d.ts} (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerFile}/main/m.kt (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/module.info create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/project.info create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.0.4.kt create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.1.kt create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.2.kt rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/lib1/module.info (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.0.kt create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.3.kt create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.5.kt create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.6.kt rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/lib2/module.info (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.0.d.ts rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.1.d.ts (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.2.d.ts (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.3.d.ts (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.4.d.ts (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.5.d.ts (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/m.6.d.ts (100%) create mode 100644 js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.kt rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/main/module.info (100%) rename js/js.translator/testData/incremental/invalidation/{typeScriptExports => typeScriptExportsPerModule}/project.info (51%) rename libraries/stdlib/js/src/kotlin/{grouping.kt => GroupingJs.kt} (99%) rename libraries/stdlib/js/src/kotlin/{numbers.kt => NumbersJs.kt} (100%) rename libraries/stdlib/js/src/kotlin/time/{DurationUnit.kt => DurationUnitJs.kt} (100%) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt index 5083fd43e67..06b92125075 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheUpdater.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.ic import org.jetbrains.kotlin.backend.common.CommonKLibResolver import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig import org.jetbrains.kotlin.backend.common.serialization.IrInterningService -import org.jetbrains.kotlin.backend.common.serialization.cityHash64 +import org.jetbrains.kotlin.backend.common.serialization.cityHash64String import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.ir.backend.js.* import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsGenerationGranularity @@ -128,7 +128,7 @@ class CacheUpdater( private val incrementalCaches = libraryDependencies.keys.associate { lib -> val libFile = KotlinLibraryFile(lib) val file = File(libFile.path) - val pathHash = file.absolutePath.cityHash64().toULong().toString(Character.MAX_RADIX) + val pathHash = file.absolutePath.cityHash64String() val libraryCacheDir = File(cacheRootDir, "${file.name}.$pathHash") libFile to IncrementalCache(KotlinLoadedLibraryHeader(lib, internationService), libraryCacheDir) } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt index 8139a67c4c8..3dae416bdd3 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCache.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.ir.backend.js.ic -import org.jetbrains.kotlin.backend.common.serialization.cityHash64 import org.jetbrains.kotlin.backend.common.serialization.FingerprintHash +import org.jetbrains.kotlin.backend.common.serialization.cityHash64String import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.protobuf.CodedInputStream import org.jetbrains.kotlin.protobuf.CodedOutputStream @@ -85,7 +85,7 @@ internal class IncrementalCache(private val library: KotlinLibraryHeader, val ca ) : KotlinSourceFileMetadata() private fun KotlinSourceFile.getCacheFile(suffix: String): File { - val pathHash = path.cityHash64().toULong().toString(Character.MAX_RADIX) + val pathHash = path.cityHash64String() return File(cacheDir, "${File(path).name}.$pathHash.$suffix") } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsExecutableProducer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsExecutableProducer.kt index 706681e0988..4b484a0673f 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsExecutableProducer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsExecutableProducer.kt @@ -29,7 +29,8 @@ class JsExecutableProducer( fun buildExecutable(granularity: JsGenerationGranularity, outJsProgram: Boolean) = when (granularity) { JsGenerationGranularity.WHOLE_PROGRAM -> buildSingleModuleExecutable(outJsProgram) - JsGenerationGranularity.PER_MODULE, JsGenerationGranularity.PER_FILE -> buildMultiModuleExecutable(outJsProgram) + JsGenerationGranularity.PER_MODULE -> buildMultiArtifactExecutable(outJsProgram, JsPerModuleCache(caches)) + JsGenerationGranularity.PER_FILE -> buildMultiArtifactExecutable(outJsProgram, JsPerFileCache(caches)) } private fun buildSingleModuleExecutable(outJsProgram: Boolean): BuildResult { @@ -45,29 +46,33 @@ class JsExecutableProducer( return BuildResult(out, listOf(mainModuleName)) } - private fun buildMultiModuleExecutable(outJsProgram: Boolean): BuildResult { + private fun buildMultiArtifactExecutable( + outJsProgram: Boolean, + jsMultiArtifactCache: JsMultiArtifactCache + ): BuildResult { val rebuildModules = mutableListOf() stopwatch.startNext("JS code cache loading") - val jsMultiModuleCache = JsMultiModuleCache(caches) - val cachedProgram = jsMultiModuleCache.loadProgramHeadersFromCache() + val cachedProgram = jsMultiArtifactCache.loadProgramHeadersFromCache() stopwatch.startNext("Cross module references resolving") val resolver = CrossModuleDependenciesResolver(moduleKind, cachedProgram.map { it.jsIrHeader }) val crossModuleReferences = resolver.resolveCrossModuleDependencies(relativeRequirePath) stopwatch.startNext("Loading JS IR modules with updated cross module references") - jsMultiModuleCache.loadRequiredJsIrModules(crossModuleReferences) + jsMultiArtifactCache.loadRequiredJsIrModules(crossModuleReferences) + + fun CacheInfo?.compileModule(moduleName: String, generateCallToMain: Boolean): CompilationOutputs { + if (this == null) return jsMultiArtifactCache.fetchCompiledJsCodeForNullCacheInfo() - fun JsMultiModuleCache.CachedModuleInfo.compileModule(moduleName: String, generateCallToMain: Boolean): CompilationOutputs { if (jsIrHeader.associatedModule == null) { stopwatch.startNext("Fetching cached JS code") - val compilationOutputs = jsMultiModuleCache.fetchCompiledJsCode(artifact) + val compilationOutputs = jsMultiArtifactCache.fetchCompiledJsCode(this) if (compilationOutputs != null) { return compilationOutputs } // theoretically should never happen stopwatch.startNext("Loading JS IR modules") - jsIrHeader.associatedModule = artifact.loadJsIrModule() + jsIrHeader.associatedModule = jsMultiArtifactCache.loadJsIrModule(this) } stopwatch.startNext("Initializing JS imports") val associatedModule = jsIrHeader.associatedModule ?: icError("can not load module $moduleName") @@ -87,17 +92,20 @@ class JsExecutableProducer( stopwatch.startNext("Committing compiled JS code") rebuildModules += moduleName - return jsMultiModuleCache.commitCompiledJsCode(artifact, compiledModule) + return jsMultiArtifactCache.commitCompiledJsCode(this, compiledModule) } - val cachedMainModule = cachedProgram.last() - val mainModule = cachedMainModule.compileModule(mainModuleName, true) + val (cachedMainModule, cachedOtherModules) = jsMultiArtifactCache.getMainModuleAndDependencies(cachedProgram) + + val mainModuleCompilationOutput = cachedMainModule + .compileModule(mainModuleName, true) + .apply { + dependencies = cachedOtherModules.map { + it.jsIrHeader.externalModuleName to it.compileModule(it.jsIrHeader.externalModuleName, false) + } + } - val cachedOtherModules = cachedProgram.dropLast(1) - mainModule.dependencies = cachedOtherModules.map { - it.jsIrHeader.externalModuleName to it.compileModule(it.jsIrHeader.externalModuleName, false) - } stopwatch.stop() - return BuildResult(mainModule, rebuildModules) + return BuildResult(mainModuleCompilationOutput, rebuildModules) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiArtifactCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiArtifactCache.kt new file mode 100644 index 00000000000..f6a5d883769 --- /dev/null +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiArtifactCache.kt @@ -0,0 +1,94 @@ +/* + * Copyright 2010-2023 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.ir.backend.js.ic + +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.* +import org.jetbrains.kotlin.protobuf.CodedInputStream +import org.jetbrains.kotlin.protobuf.CodedOutputStream +import java.io.File + +abstract class JsMultiArtifactCache { + abstract fun loadProgramHeadersFromCache(): List + abstract fun loadRequiredJsIrModules(crossModuleReferences: Map) + abstract fun fetchCompiledJsCode(cacheInfo: T): CompilationOutputsCached? + abstract fun commitCompiledJsCode(cacheInfo: T, compilationOutputs: CompilationOutputsBuilt): CompilationOutputs + abstract fun fetchCompiledJsCodeForNullCacheInfo(): CompilationOutputs + abstract fun loadJsIrModule(cacheInfo: T): JsIrModule + abstract fun getMainModuleAndDependencies(cacheInfo: List): Pair> + + protected fun File.writeIfNotNull(data: String?) { + if (data != null) { + parentFile?.mkdirs() + writeText(data) + } else { + delete() + } + } + + protected fun CodedInputStream.fetchJsIrModuleHeaderNames(): JsIrModuleHeaderNames { + val definitions = mutableSetOf() + val nameBindings = mutableMapOf() + val optionalCrossModuleImports = hashSetOf() + + repeat(readInt32()) { + val tag = readString() + val mask = readInt32() + if (mask and NameType.DEFINITIONS.typeMask != 0) { + definitions += tag + } + if (mask and NameType.OPTIONAL_IMPORTS.typeMask != 0) { + optionalCrossModuleImports += tag + } + if (mask and NameType.NAME_BINDINGS.typeMask != 0) { + nameBindings[tag] = readString() + } + } + + return JsIrModuleHeaderNames(definitions, nameBindings, optionalCrossModuleImports) + } + + protected fun CodedOutputStream.commitJsIrModuleHeaderNames(jsIrHeader: JsIrModuleHeader) { + val names = mutableMapOf>() + + for ((tag, name) in jsIrHeader.nameBindings) { + names[tag] = NameType.NAME_BINDINGS.typeMask to name + } + for (tag in jsIrHeader.optionalCrossModuleImports) { + val maskAndName = names[tag] + names[tag] = ((maskAndName?.first ?: 0) or NameType.OPTIONAL_IMPORTS.typeMask) to maskAndName?.second + } + for (tag in jsIrHeader.definitions) { + val maskAndName = names[tag] + names[tag] = ((maskAndName?.first ?: 0) or NameType.DEFINITIONS.typeMask) to maskAndName?.second + } + + writeInt32NoTag(names.size) + + for ((tag, maskAndName) in names) { + writeStringNoTag(tag) + writeInt32NoTag(maskAndName.first) + if (maskAndName.second != null) { + writeStringNoTag(maskAndName.second) + } + } + } + + interface CacheInfo { + val jsIrHeader: JsIrModuleHeader + } + + protected data class JsIrModuleHeaderNames( + val definitions: Set, + val nameBindings: Map, + val optionalCrossModuleImports: Set, + ) + + protected enum class NameType(val typeMask: Int) { + DEFINITIONS(0b1), + NAME_BINDINGS(0b10), + OPTIONAL_IMPORTS(0b100) + } +} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerFileCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerFileCache.kt new file mode 100644 index 00000000000..addba1587cc --- /dev/null +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerFileCache.kt @@ -0,0 +1,231 @@ +/* + * Copyright 2010-2022 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.ir.backend.js.ic + +import org.jetbrains.kotlin.backend.common.serialization.cityHash64 +import org.jetbrains.kotlin.backend.common.serialization.cityHash64String +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.* +import org.jetbrains.kotlin.protobuf.CodedInputStream +import org.jetbrains.kotlin.protobuf.CodedOutputStream +import org.jetbrains.kotlin.utils.addToStdlib.runIf +import java.io.File + +class JsPerFileCache(private val moduleArtifacts: List) : JsMultiArtifactCache() { + companion object { + private const val JS_MODULE_HEADER = "js.module.header.bin" + private const val CACHED_FILE_JS = "file.js" + private const val CACHED_EXPORT_FILE_JS = "file.export.js" + private const val CACHED_FILE_JS_MAP = "file.js.map" + private const val CACHED_FILE_D_TS = "file.d.ts" + } + + class CachedFileInfo( + val moduleArtifact: ModuleArtifact, + val fileArtifact: SrcFileArtifact, + val isExportFileCachedInfo: Boolean = false, + ) : CacheInfo { + var dtsHash: Long? = null + var crossFileReferencesHash: ICHash = ICHash() + var exportFileCachedInfo: CachedFileInfo? = null + override lateinit var jsIrHeader: JsIrModuleHeader + + constructor( + jsIrModuleHeader: JsIrModuleHeader, + moduleArtifact: ModuleArtifact, + fileArtifact: SrcFileArtifact, + isExportFileCachedInfo: Boolean = false, + tsDeclarationsHash: Long? = null, + ) : this(moduleArtifact, fileArtifact, isExportFileCachedInfo) { + jsIrHeader = jsIrModuleHeader + dtsHash = tsDeclarationsHash + } + + val moduleHeaderArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(JS_MODULE_HEADER) } + + val jsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(if (isExportFileCachedInfo) CACHED_EXPORT_FILE_JS else CACHED_FILE_JS) } + val dtsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { runIf(isExportFileCachedInfo) { getArtifactWithName(CACHED_FILE_D_TS) } } + val sourceMapFileArtifact by lazy(LazyThreadSafetyMode.NONE) { runIf(!isExportFileCachedInfo) { getArtifactWithName(CACHED_FILE_JS_MAP) } } + + private fun getArtifactWithName(name: String): File? = moduleArtifact.artifactsDir?.let { File(it, "$filePrefix.$name") } + + private val filePrefix by lazy(LazyThreadSafetyMode.NONE) { + val pathHash = fileArtifact.srcFilePath.cityHash64String() + "${fileArtifact.srcFilePath.substringAfterLast('/')}.$pathHash" + } + } + + private val headerToCachedInfo = hashMapOf() + private val moduleFragmentToExternalName = ModuleFragmentToExternalName(emptyMap()) + + private fun JsIrProgramFragment.getMainFragmentExternalName(moduleArtifact: ModuleArtifact) = + moduleFragmentToExternalName.getExternalNameFor(name, packageFqn, moduleArtifact.moduleExternalName) + + private fun JsIrProgramFragment.getExportFragmentExternalName(moduleArtifact: ModuleArtifact) = + moduleFragmentToExternalName.getExternalNameForExporterFile(name, packageFqn, moduleArtifact.moduleExternalName) + + private fun JsIrProgramFragment.asIrModuleHeader(moduleName: String): JsIrModuleHeader { + return JsIrModuleHeader( + moduleName = moduleName, + externalModuleName = moduleName, + definitions = definitions, + nameBindings = nameBindings.mapValues { v -> v.value.toString() }, + optionalCrossModuleImports = optionalCrossModuleImports, + associatedModule = null + ) + } + + private fun SrcFileArtifact.loadJsIrModuleHeaders(moduleArtifact: ModuleArtifact) = with(loadJsIrFragments()) { + LoadedJsIrModuleHeaders( + mainFragment.run { asIrModuleHeader(getMainFragmentExternalName(moduleArtifact)) }, + exportFragment?.run { asIrModuleHeader(mainFragment.getExportFragmentExternalName(moduleArtifact)) }, + ) + } + + private fun CodedInputStream.loadSingleCachedFileInfo(cachedFileInfo: CachedFileInfo) = cachedFileInfo.also { + val moduleName = readString() + + it.crossFileReferencesHash = ICHash.fromProtoStream(this) + it.dtsHash = runIf(readBool()) { readInt64() } + + val (definitions, nameBindings, optionalCrossModuleImports) = fetchJsIrModuleHeaderNames() + + it.jsIrHeader = JsIrModuleHeader( + moduleName = moduleName, + externalModuleName = moduleName, + definitions = definitions, + nameBindings = nameBindings, + optionalCrossModuleImports = optionalCrossModuleImports, + associatedModule = null + ) + } + + private fun CachedFileInfo.readModuleHeaderCache(f: CodedInputStream.() -> T): T? = moduleHeaderArtifact?.useCodedInputIfExists(f) + + private fun ModuleArtifact.fetchFileInfoFor(fileArtifact: SrcFileArtifact): List? { + val moduleArtifact = this + val mainFileCachedFileInfo = CachedFileInfo(moduleArtifact, fileArtifact) + + return mainFileCachedFileInfo.readModuleHeaderCache { + mainFileCachedFileInfo.run { + exportFileCachedInfo = fetchFileInfoForExportedPart(this) + loadSingleCachedFileInfo(this) + listOfNotNull(exportFileCachedInfo, this) + } + } + } + + private fun CodedInputStream.fetchFileInfoForExportedPart(mainCachedFileInfo: CachedFileInfo): CachedFileInfo? { + return ifTrue { + loadSingleCachedFileInfo( + CachedFileInfo( + mainCachedFileInfo.moduleArtifact, + mainCachedFileInfo.fileArtifact, + isExportFileCachedInfo = true + ) + ) + } + } + + private fun CodedOutputStream.commitSingleFileInfo(cachedFileInfo: CachedFileInfo) { + writeStringNoTag(cachedFileInfo.jsIrHeader.externalModuleName) + cachedFileInfo.crossFileReferencesHash.toProtoStream(this) + ifNotNull(cachedFileInfo.dtsHash, ::writeInt64NoTag) + commitJsIrModuleHeaderNames(cachedFileInfo.jsIrHeader) + } + + private fun CachedFileInfo.commitFileInfo() = runIf(!isExportFileCachedInfo) { + moduleHeaderArtifact?.useCodedOutput { + ifNotNull(exportFileCachedInfo) { commitSingleFileInfo(it) } + commitSingleFileInfo(this@commitFileInfo) + } + } + + private fun ModuleArtifact.loadFileInfoFor(fileArtifact: SrcFileArtifact): List { + val moduleArtifact = this + val headers = fileArtifact.loadJsIrModuleHeaders(moduleArtifact) + + val mainCachedFileInfo = CachedFileInfo(headers.mainHeader, this, fileArtifact) + + if (headers.exportHeader != null) { + val tsDeclarationsHash = fileArtifact.loadJsIrFragments().exportFragment?.dts?.raw?.cityHash64() + val cachedExportFileInfo = mainCachedFileInfo.readModuleHeaderCache { fetchFileInfoForExportedPart(mainCachedFileInfo) } + mainCachedFileInfo.exportFileCachedInfo = if (cachedExportFileInfo?.dtsHash != tsDeclarationsHash) { + CachedFileInfo( + headers.exportHeader, + moduleArtifact, + fileArtifact, + tsDeclarationsHash = tsDeclarationsHash, + isExportFileCachedInfo = true + ) + } else { + cachedExportFileInfo + } + } + + return listOfNotNull(mainCachedFileInfo.exportFileCachedInfo, mainCachedFileInfo) + } + + private val CachedFileInfo.cachedFiles: CachedFileArtifacts? + get() = jsFileArtifact?.let { CachedFileArtifacts(it, sourceMapFileArtifact, dtsFileArtifact) } + + override fun getMainModuleAndDependencies(cacheInfo: List) = null to cacheInfo + + override fun fetchCompiledJsCodeForNullCacheInfo() = PerFileEntryPointCompilationOutput() + + override fun fetchCompiledJsCode(cacheInfo: CachedFileInfo) = + cacheInfo.cachedFiles?.let { (jsCodeFile, sourceMapFile, tsDeclarationsFile) -> + jsCodeFile.ifExists { this } + ?.let { CompilationOutputsCached(it, sourceMapFile?.ifExists { this }, tsDeclarationsFile?.ifExists { this }) } + } + + override fun commitCompiledJsCode(cacheInfo: CachedFileInfo, compilationOutputs: CompilationOutputsBuilt) = + cacheInfo.cachedFiles?.let { (jsCodeFile, jsMapFile, tsDeclarationsFile) -> + tsDeclarationsFile?.writeIfNotNull(compilationOutputs.tsDefinitions?.raw) + compilationOutputs.writeJsCodeIntoModuleCache(jsCodeFile, jsMapFile) + } ?: compilationOutputs + + override fun loadJsIrModule(cacheInfo: CachedFileInfo): JsIrModule { + val fragments = cacheInfo.fileArtifact.loadJsIrFragments() + return JsIrModule( + cacheInfo.jsIrHeader.moduleName, + cacheInfo.jsIrHeader.externalModuleName, + listOf(if (cacheInfo.isExportFileCachedInfo) fragments.exportFragment!! else fragments.mainFragment) + ) + } + + override fun loadProgramHeadersFromCache(): List { + return moduleArtifacts + .flatMap { module -> + module.fileArtifacts.flatMap { + if (it.isModified()) + module.loadFileInfoFor(it) + else + module.fetchFileInfoFor(it) ?: module.loadFileInfoFor(it) + } + } + .onEach { headerToCachedInfo[it.jsIrHeader] = it } + } + + override fun loadRequiredJsIrModules(crossModuleReferences: Map) { + for ((header, references) in crossModuleReferences) { + val cachedInfo = headerToCachedInfo[header] ?: notFoundIcError("artifact for module ${header.moduleName}") + + val actualCrossModuleHash = references.crossModuleReferencesHashForIC() + + if (header.associatedModule == null && cachedInfo.crossFileReferencesHash != actualCrossModuleHash) { + header.associatedModule = loadJsIrModule(cachedInfo) + } + + header.associatedModule?.let { + cachedInfo.crossFileReferencesHash = actualCrossModuleHash + cachedInfo.commitFileInfo() + } + } + } + + private data class CachedFileArtifacts(val jsCodeFile: File, val sourceMapFile: File?, val tsDeclarationsFile: File?) + private data class LoadedJsIrModuleHeaders(val mainHeader: JsIrModuleHeader, val exportHeader: JsIrModuleHeader?) +} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerModuleCache.kt similarity index 57% rename from compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt rename to compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerModuleCache.kt index a33b476b7a1..0464c90f521 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsPerModuleCache.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.ic import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.* import java.io.File -class JsMultiModuleCache(private val moduleArtifacts: List) { +class JsPerModuleCache(private val moduleArtifacts: List) : JsMultiArtifactCache() { companion object { private const val JS_MODULE_HEADER = "js.module.header.bin" private const val CACHED_MODULE_JS = "module.js" @@ -16,35 +16,18 @@ class JsMultiModuleCache(private val moduleArtifacts: List) { private const val CACHED_MODULE_D_TS = "module.d.ts" } - private enum class NameType(val typeMask: Int) { - DEFINITIONS(0b1), NAME_BINDINGS(0b10), OPTIONAL_IMPORTS(0b100) - } - - class CachedModuleInfo(val artifact: ModuleArtifact, val jsIrHeader: JsIrModuleHeader, var crossModuleReferencesHash: ICHash = ICHash()) + class CachedModuleInfo( + val artifact: ModuleArtifact, + override val jsIrHeader: JsIrModuleHeader, + var crossModuleReferencesHash: ICHash = ICHash() + ) : CacheInfo private val headerToCachedInfo = hashMapOf() private fun ModuleArtifact.fetchModuleInfo() = File(artifactsDir, JS_MODULE_HEADER).useCodedInputIfExists { - val definitions = mutableSetOf() - val nameBindings = mutableMapOf() - val optionalCrossModuleImports = hashSetOf() - val crossModuleReferencesHash = ICHash.fromProtoStream(this) val reexportedInModuleWithName = ifTrue { readString() } - - repeat(readInt32()) { - val tag = readString() - val mask = readInt32() - if (mask and NameType.DEFINITIONS.typeMask != 0) { - definitions += tag - } - if (mask and NameType.OPTIONAL_IMPORTS.typeMask != 0) { - optionalCrossModuleImports += tag - } - if (mask and NameType.NAME_BINDINGS.typeMask != 0) { - nameBindings[tag] = readString() - } - } + val (definitions, nameBindings, optionalCrossModuleImports) = fetchJsIrModuleHeaderNames() CachedModuleInfo( artifact = this@fetchModuleInfo, @@ -63,61 +46,36 @@ class JsMultiModuleCache(private val moduleArtifacts: List) { private fun CachedModuleInfo.commitModuleInfo() = artifact.artifactsDir?.let { cacheDir -> File(cacheDir, JS_MODULE_HEADER).useCodedOutput { - val names = mutableMapOf>() - for ((tag, name) in jsIrHeader.nameBindings) { - names[tag] = NameType.NAME_BINDINGS.typeMask to name - } - for (tag in jsIrHeader.optionalCrossModuleImports) { - val maskAndName = names[tag] - names[tag] = ((maskAndName?.first ?: 0) or NameType.OPTIONAL_IMPORTS.typeMask) to maskAndName?.second - } - for (tag in jsIrHeader.definitions) { - val maskAndName = names[tag] - names[tag] = ((maskAndName?.first ?: 0) or NameType.DEFINITIONS.typeMask) to maskAndName?.second - } crossModuleReferencesHash.toProtoStream(this) - - ifNotNull(jsIrHeader.reexportedInModuleWithName) { - writeStringNoTag(it) - } - - writeInt32NoTag(names.size) - - for ((tag, maskAndName) in names) { - writeStringNoTag(tag) - writeInt32NoTag(maskAndName.first) - if (maskAndName.second != null) { - writeStringNoTag(maskAndName.second) - } - } + ifNotNull(jsIrHeader.reexportedInModuleWithName) { writeStringNoTag(it) } + commitJsIrModuleHeaderNames(jsIrHeader) } } - private fun File.writeIfNotNull(data: String?) { - if (data != null) { - parentFile?.mkdirs() - writeText(data) - } else { - delete() - } - } + override fun loadJsIrModule(cacheInfo: CachedModuleInfo) = cacheInfo.artifact.loadJsIrModule() - fun fetchCompiledJsCode(artifact: ModuleArtifact) = artifact.artifactsDir?.let { cacheDir -> + override fun getMainModuleAndDependencies(cacheInfo: List) = + cacheInfo.last() to cacheInfo.dropLast(1) + + override fun fetchCompiledJsCodeForNullCacheInfo() = + error("Should never happen for per module granularity") + + override fun fetchCompiledJsCode(cacheInfo: CachedModuleInfo) = cacheInfo.artifact.artifactsDir?.let { cacheDir -> val jsCodeFile = File(cacheDir, CACHED_MODULE_JS).ifExists { this } val sourceMapFile = File(cacheDir, CACHED_MODULE_JS_MAP).ifExists { this } val tsDefinitionsFile = File(cacheDir, CACHED_MODULE_D_TS).ifExists { this } jsCodeFile?.let { CompilationOutputsCached(it, sourceMapFile, tsDefinitionsFile) } } - fun commitCompiledJsCode(artifact: ModuleArtifact, compilationOutputs: CompilationOutputsBuilt): CompilationOutputs = - artifact.artifactsDir?.let { cacheDir -> + override fun commitCompiledJsCode(cacheInfo: CachedModuleInfo, compilationOutputs: CompilationOutputsBuilt): CompilationOutputs = + cacheInfo.artifact.artifactsDir?.let { cacheDir -> val jsCodeFile = File(cacheDir, CACHED_MODULE_JS) val jsMapFile = File(cacheDir, CACHED_MODULE_JS_MAP) File(cacheDir, CACHED_MODULE_D_TS).writeIfNotNull(compilationOutputs.tsDefinitions?.raw) compilationOutputs.writeJsCodeIntoModuleCache(jsCodeFile, jsMapFile) } ?: compilationOutputs - fun loadProgramHeadersFromCache(): List { + override fun loadProgramHeadersFromCache(): List { return moduleArtifacts.map { artifact -> fun loadModuleInfo() = CachedModuleInfo(artifact, artifact.loadJsIrModule().makeModuleHeader()) val actualInfo = when { @@ -130,7 +88,7 @@ class JsMultiModuleCache(private val moduleArtifacts: List) { } } - fun loadRequiredJsIrModules(crossModuleReferences: Map) { + override fun loadRequiredJsIrModules(crossModuleReferences: Map) { for ((header, references) in crossModuleReferences) { val cachedInfo = headerToCachedInfo[header] ?: notFoundIcError("artifact for module ${header.moduleName}") val actualCrossModuleHash = references.crossModuleReferencesHashForIC() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/CompilationOutputs.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/CompilationOutputs.kt index de549eb4be1..a97f36b7a4b 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/CompilationOutputs.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/CompilationOutputs.kt @@ -29,13 +29,16 @@ abstract class CompilationOutputs { abstract fun writeJsCode(outputJsFile: File, outputJsMapFile: File) - fun writeAll(outputDir: File, outputName: String, genDTS: Boolean, moduleName: String, moduleKind: ModuleKind): Collection { - val writtenFiles = LinkedHashSet(2 * (dependencies.size + 1) + 1) + fun createWrittenFilesContainer(): MutableSet = LinkedHashSet(2 * (dependencies.size + 1) + 1) + + open fun writeAll(outputDir: File, outputName: String, genDTS: Boolean, moduleName: String, moduleKind: ModuleKind): Collection { + val writtenFiles = createWrittenFilesContainer() fun File.writeAsJsFile(out: CompilationOutputs) { parentFile.mkdirs() val jsMapFile = mapForJsFile val jsFile = normalizedAbsoluteFile + out.writeJsCode(jsFile, jsMapFile) writtenFiles += jsFile @@ -55,9 +58,11 @@ abstract class CompilationOutputs { writtenFiles += dtsFile } - Files.walk(outputDir.toPath()).map { it.toFile() }.filter { it != outputDir && it !in writtenFiles }.forEach(File::delete) + return writtenFiles.also { deleteNonWrittenFiles(outputDir, it) } + } - return writtenFiles + fun deleteNonWrittenFiles(outputDir: File, writtenFiles: Set) { + Files.walk(outputDir.toPath()).map { it.toFile() }.filter { it != outputDir && it !in writtenFiles }.forEach(File::delete) } fun getFullTsDefinition(moduleName: String, moduleKind: ModuleKind): String { @@ -65,13 +70,13 @@ abstract class CompilationOutputs { return allTsDefinitions.toTypeScript(moduleName, moduleKind) } - private val File.normalizedAbsoluteFile + protected val File.normalizedAbsoluteFile get() = absoluteFile.normalize() - private val File.mapForJsFile + protected val File.mapForJsFile get() = resolveSibling("$name.map").normalizedAbsoluteFile - private val File.dtsForJsFile + protected val File.dtsForJsFile get() = resolveSibling("$nameWithoutExtension.d.ts").normalizedAbsoluteFile } @@ -100,13 +105,47 @@ class CompilationOutputsBuilt( outputJsFile.writeText(rawJsCode + sourceMappingUrl) } - fun writeJsCodeIntoModuleCache(outputJsFile: File, outputJsMapFile: File): CompilationOutputsBuiltForCache { - sourceMap?.let { outputJsMapFile.writeText(it) } + fun writeJsCodeIntoModuleCache(outputJsFile: File, outputJsMapFile: File?): CompilationOutputsBuiltForCache { + sourceMap?.let { outputJsMapFile?.writeText(it) } outputJsFile.writeText(rawJsCode) return CompilationOutputsBuiltForCache(outputJsFile, outputJsMapFile, this) } } +// The output emulates the main module that has all the dependencies. In per-module we expect that the last processed module is a main module +// and after the compilation we rename it with the provided [outputName] and save all of its dependencies, but with the per-file mode we don't have +// this last "main" module, as a result we need to emulate it with the output. Also, it helps to save .d.ts files file-by-file instead of the generating +// one big main .d.ts file +class PerFileEntryPointCompilationOutput : CompilationOutputs() { + override val tsDefinitions: TypeScriptFragment? = null + override val jsProgram: JsProgram? = null + + override fun writeJsCode(outputJsFile: File, outputJsMapFile: File) {} + + override fun writeAll(outputDir: File, outputName: String, genDTS: Boolean, moduleName: String, moduleKind: ModuleKind): Collection { + val writtenFiles = createWrittenFilesContainer() + + dependencies.forEach { (name, content) -> + val dependencyFile = outputDir.resolve("$name${moduleKind.extension}").also { it.parentFile.mkdirs() } + val jsMapFile = dependencyFile.mapForJsFile + val jsFile = dependencyFile.normalizedAbsoluteFile + val tsFile = jsFile.dtsForJsFile + + content.writeJsCode(jsFile, jsMapFile) + + writtenFiles += jsFile + writtenFiles += jsMapFile + + content.tsDefinitions.takeIf { genDTS }?.let { + tsFile.writeText(listOf(it).toTypeScript(name, moduleKind)) + writtenFiles += tsFile + } + } + + return writtenFiles.also { deleteNonWrittenFiles(outputDir, it) } + } +} + class CompilationOutputsCached( private val jsCodeFile: File, private val sourceMapFile: File?, @@ -142,7 +181,7 @@ class CompilationOutputsCached( class CompilationOutputsBuiltForCache( private val jsCodeFile: File, - private val sourceMapFile: File, + private val sourceMapFile: File?, private val outputBuilt: CompilationOutputsBuilt ) : CompilationOutputs() { @@ -160,6 +199,6 @@ class CompilationOutputsBuiltForCache( outputBuilt.writeJsCode(outputJsFile, outputJsMapFile) jsCodeFile.copyModificationTimeFrom(outputJsFile) - sourceMapFile.copyModificationTimeFrom(outputJsMapFile) + sourceMapFile?.copyModificationTimeFrom(outputJsMapFile) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt index 257d02a8bcc..d3063aaee28 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt @@ -264,12 +264,12 @@ class IrModuleToJsTransformer( for (fileExports in module.files) { if (fileExports.file.couldBeSkipped()) continue - val (programFragment, exportProgramFragment) = generateProgramFragment(fileExports, mode) + val programFragments = generateProgramFragment(fileExports, mode) - add(fileExports.toJsIrModule(mode, programFragment)) + add(fileExports.toJsIrModule(programFragments.mainFragment)) - if (fileExports.exports.isNotEmpty()) { - add(fileExports.toJsIrModuleForExport(module, mode, exportProgramFragment)) + programFragments.exportFragment?.let { + add(fileExports.toJsIrModuleForExport(module, it)) hasFileWithJsExportedDeclaration = true } } @@ -283,22 +283,18 @@ class IrModuleToJsTransformer( return JsIrProgram(modulesPerFile) } - private fun IrFileExports.toJsIrModule(mode: TranslationMode, programFragment: JsIrProgramFragment): JsIrModule { + private fun IrFileExports.toJsIrModule(programFragment: JsIrProgramFragment): JsIrModule { return JsIrModule( moduleFragmentToNameMapper.getSafeNameFor(file), - moduleFragmentToNameMapper.getExternalNameFor(file, mode.granularity), + moduleFragmentToNameMapper.getExternalNameFor(file), listOf(programFragment), ) } - private fun IrFileExports.toJsIrModuleForExport( - module: IrAndExportedDeclarations, - mode: TranslationMode, - programFragment: JsIrProgramFragment - ): JsIrModule { + private fun IrFileExports.toJsIrModuleForExport(module: IrAndExportedDeclarations, programFragment: JsIrProgramFragment): JsIrModule { return JsIrModule( moduleFragmentToNameMapper.getSafeNameExporterFor(file), - moduleFragmentToNameMapper.getExternalNameForExporterFile(file, mode.granularity), + moduleFragmentToNameMapper.getExternalNameForExporterFile(file), listOf(programFragment), module.fragment.safeName ) @@ -308,7 +304,7 @@ class IrModuleToJsTransformer( return JsIrModule( fragment.safeName, moduleFragmentToNameMapper.getExternalNameFor(fragment), - listOf(JsIrProgramFragment("")) + listOf(JsIrProgramFragment(fragment.safeName, "")) ) } @@ -319,22 +315,21 @@ class IrModuleToJsTransformer( private fun IrFileExports.generateProgramFragmentForExport( mode: TranslationMode, nameScope: NameTable - ): JsIrProgramFragment { + ): JsIrProgramFragment? { + if (exports.isEmpty()) return null + val globalNames = NameTable(nameScope) val nameGenerator = JsNameLinkingNamer(backendContext, mode.minimizedMemberNames, isEsModules) val internalModuleName = ReservedJsNames.makeInternalModuleName().takeIf { !isEsModules } val staticContext = JsStaticContext(backendContext, nameGenerator, nameScope, mode) - return JsIrProgramFragment(file.packageFqName.asString()).apply { - dts = tsDeclarations - exports.statements += ExportModelToJsStatements(staticContext, backendContext.es6mode, { globalNames.declareFreshName(it, it) }) - .generateModuleExport( - ExportedModule(mainModuleName, moduleKind, this@generateProgramFragmentForExport.exports), - internalModuleName, - isEsModules - ) - computeAndSaveNameBindings(emptySet(), nameGenerator) - } + return JsIrProgramFragment("", file.packageFqName.asString()) + .also { + it.dts = tsDeclarations + it.exports.statements += ExportModelToJsStatements(staticContext, backendContext.es6mode, { globalNames.declareFreshName(it, it) }) + .generateModuleExport(ExportedModule(mainModuleName, moduleKind, exports), internalModuleName, isEsModules) + it.computeAndSaveNameBindings(emptySet(), nameGenerator) + } } private fun generateProgramFragment(fileExports: IrFileExports, mode: TranslationMode): List { @@ -342,7 +337,10 @@ class IrModuleToJsTransformer( val nameGenerator = JsNameLinkingNamer(backendContext, mode.minimizedMemberNames, isEsModules) val staticContext = JsStaticContext(backendContext, nameGenerator, globalNameScope, mode) - val result = JsIrProgramFragment(fileExports.file.packageFqName.asString()).apply { + val result = JsIrProgramFragment( + fileExports.file.getJsName() ?: fileExports.file.nameWithoutExtension, + fileExports.file.packageFqName.asString() + ).apply { if (shouldGeneratePolyfills) { polyfills.statements += backendContext.polyfills.getAllPolyfillsFor(fileExports.file) } @@ -415,7 +413,7 @@ class IrModuleToJsTransformer( optimizeFragmentByJsAst(result) } - return listOf(result, exportFragment) + return listOfNotNull(result, exportFragment) } private fun Set.computeTag(declaration: IrDeclaration): String? { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt index 3e5ef6523a0..881c5014b15 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsIrProgramFragment.kt @@ -5,13 +5,14 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs +import org.jetbrains.kotlin.backend.common.serialization.cityHash64String import org.jetbrains.kotlin.ir.backend.js.export.TypeScriptFragment import org.jetbrains.kotlin.ir.backend.js.utils.toJsIdentifier import org.jetbrains.kotlin.js.backend.ast.* import java.io.File import org.jetbrains.kotlin.serialization.js.ModuleKind -class JsIrProgramFragment(val packageFqn: String) { +class JsIrProgramFragment(val name: String, val packageFqn: String) { val nameBindings = mutableMapOf() val optionalCrossModuleImports = hashSetOf() val declarations = JsCompositeBlock() @@ -150,7 +151,14 @@ private class JsIrModuleCrossModuleReferenceBuilder( fun buildExportNames(startIndex: Int = 0) { var index = startIndex - exportNames = exports.sorted().associateWith { index++.toJsIdentifier() } + exportNames = exports.sorted().associateWith { tag -> + // Bundlers should minimize the names by ourselves. Ex, webpack has `optimization.mangleExports` property + if (moduleKind == ModuleKind.ES) { + "${header.nameBindings[tag]}${tag.cityHash64String()}" + } else { + index++.toJsIdentifier() + } + } } fun buildCrossModuleRefs(): CrossModuleReferences { @@ -267,4 +275,7 @@ fun JsStatement.renameImportedSymbolInternalName(newName: JsName): JsStatement { is JsVars -> JsVars(JsVars.JsVar(newName, vars.single().initExpression)) else -> error("Unexpected cross-module import statement ${this::class.qualifiedName}") } -} \ No newline at end of file +} + +val List.mainFragment: JsIrProgramFragment get() = first() +val List.exportFragment: JsIrProgramFragment? get() = getOrNull(1) \ No newline at end of file diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/Merger.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/Merger.kt index d6fa6420057..67bdc2e01d4 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/Merger.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/Merger.kt @@ -41,7 +41,7 @@ class Merger( error("Missing name for declaration '${declaration}'") } - importStatements.putIfAbsent(declaration, rename(importStatement).importStatementWithName(importName)) + importStatements.putIfAbsent(declaration, rename(importStatement.importStatementWithName(importName))) } val classModels = (mutableMapOf() + f.classes) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleFragmentToExternalName.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleFragmentToExternalName.kt index 575add95c32..fa00297ea5c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleFragmentToExternalName.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleFragmentToExternalName.kt @@ -6,10 +6,10 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs import org.jetbrains.kotlin.ir.backend.js.utils.getJsName +import org.jetbrains.kotlin.ir.backend.js.utils.nameWithoutExtension import org.jetbrains.kotlin.ir.backend.js.utils.sanitizeName import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.declarations.name import org.jetbrains.kotlin.ir.declarations.path private const val EXPORTER_FILE_POSTFIX = ".export" @@ -17,9 +17,8 @@ private const val EXPORTER_FILE_POSTFIX = ".export" class ModuleFragmentToExternalName(private val jsOutputNamesMapping: Map) { private val externalNameToItsFile = hashMapOf() - fun getExternalNameFor(file: IrFile, granularity: JsGenerationGranularity): String { - assert(granularity == JsGenerationGranularity.PER_FILE) { "This method should be used only for PER_FILE granularity" } - return file.module.getJsOutputName().getExternalModuleNameForPerFile(file).also { + fun getExternalNameFor(file: IrFile): String { + return getExternalNameFor(file.outputName, file.packageFqName.asString(), file.module.getJsOutputName()).also { val alreadyReservedBy = externalNameToItsFile.putIfAbsent(it.lowercase(), file) if (alreadyReservedBy != null && alreadyReservedBy != file) { @@ -35,8 +34,16 @@ class ModuleFragmentToExternalName(private val jsOutputNamesMapping: Map, val steps: List, val muted: Boolean, val moduleKind: ModuleKind) { +class ProjectInfo( + val name: String, + val modules: List, + val steps: List, + val muted: Boolean, + val moduleKind: ModuleKind, + val ignoredGranularities: Set +) { - class ProjectBuildStep(val id: Int, val order: List, val dirtyJS: List, val language: List) + class ProjectBuildStep( + val id: Int, + val order: List, + val dirtyJsFiles: List, + val dirtyJsModules: List, + val language: List, + ) } class ModuleInfo(val moduleName: String) { @@ -60,8 +74,11 @@ const val PROJECT_INFO_FILE = "project.info" private const val MODULES_LIST = "MODULES" private const val MODULES_KIND = "MODULE_KIND" private const val LIBS_LIST = "libs" -private const val DIRTY_JS_MODULES_LIST = "dirty js" +private const val DIRTY_JS_FILES_LIST = "dirty js files" +private const val DIRTY_JS_MODULES_LIST = "dirty js modules" private const val LANGUAGE = "language" +private const val IGNORE_PER_FILE = "IGNORE_PER_FILE" +private const val IGNORE_PER_MODULE = "IGNORE_PER_MODULE" const val MODULE_INFO_FILE = "module.info" private const val DEPENDENCIES = "dependencies" @@ -119,7 +136,8 @@ class ProjectInfoParser(infoFile: File) : InfoParser(infoFile) { private fun parseSteps(firstId: Int, lastId: Int): List { val order = mutableListOf() - val dirtyJS = mutableListOf() + val dirtyJsFiles = mutableListOf() + val dirtyJsModules = mutableListOf() val language = mutableListOf() loop { line -> @@ -138,7 +156,8 @@ class ProjectInfoParser(infoFile: File) : InfoParser(infoFile) { when (op) { LIBS_LIST -> order += split[1].splitAndTrim() - DIRTY_JS_MODULES_LIST -> dirtyJS += split[1].splitAndTrim() + DIRTY_JS_FILES_LIST -> dirtyJsFiles += split[1].splitAndTrim() + DIRTY_JS_MODULES_LIST -> dirtyJsModules += split[1].splitAndTrim() LANGUAGE -> language += split[1].splitAndTrim() else -> println(diagnosticMessage("Unknown op $op", line)) } @@ -146,12 +165,13 @@ class ProjectInfoParser(infoFile: File) : InfoParser(infoFile) { false } - return (firstId..lastId).map { ProjectInfo.ProjectBuildStep(it, order, dirtyJS, language) } + return (firstId..lastId).map { ProjectInfo.ProjectBuildStep(it, order, dirtyJsFiles, dirtyJsModules, language) } } override fun parse(entryName: String): ProjectInfo { val libraries = mutableListOf() val steps = mutableListOf() + val ignoredGranularities = mutableSetOf() var muted = false var moduleKind = ModuleKind.ES @@ -171,6 +191,8 @@ class ProjectInfoParser(infoFile: File) : InfoParser(infoFile) { when { op == MODULES_LIST -> libraries += split[1].splitAndTrim() + op == IGNORE_PER_FILE && split[1].trim() == "true" -> ignoredGranularities += JsGenerationGranularity.PER_FILE + op == IGNORE_PER_MODULE && split[1].trim() == "true" -> ignoredGranularities += JsGenerationGranularity.PER_MODULE op == MODULES_KIND -> moduleKind = split[1].trim() .ifEmpty { error("Module kind value should be provided if MODULE_KIND pragma was specified") } .let { moduleKindMap[it] ?: error("Unknown MODULE_KIND value '$it'") } @@ -200,7 +222,7 @@ class ProjectInfoParser(infoFile: File) : InfoParser(infoFile) { false } - return ProjectInfo(entryName, libraries, steps, muted, moduleKind) + return ProjectInfo(entryName, libraries, steps, muted, moduleKind, ignoredGranularities) } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt b/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt index 3569fb9373d..6328649bbc2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/generators/tests/GenerateJsTests.kt @@ -7,10 +7,7 @@ package org.jetbrains.kotlin.generators.tests import org.jetbrains.kotlin.generators.generateTestGroupSuiteWithJUnit5 import org.jetbrains.kotlin.generators.impl.generateTestGroupSuite -import org.jetbrains.kotlin.incremental.AbstractJsIrES6InvalidationTest -import org.jetbrains.kotlin.incremental.AbstractJsIrInvalidationWithPLTest -import org.jetbrains.kotlin.incremental.AbstractJsIrInvalidationTest -import org.jetbrains.kotlin.incremental.AbstractJsFirInvalidationTest +import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.js.test.* import org.jetbrains.kotlin.js.test.fir.* import org.jetbrains.kotlin.js.test.ir.* @@ -73,19 +70,35 @@ fun main(args: Array) { } testGroup("js/js.tests/tests-gen", "js/js.translator/testData") { - testClass { + testClass { model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) } - testClass { + testClass { + model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) + } + + testClass { model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR_ES6, recursive = false) } - testClass { + testClass { + model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR_ES6, recursive = false) + } + + testClass { model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) } - testClass { + testClass { + model("incremental/invalidation/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) + } + + testClass { + model("incremental/invalidationWithPL/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) + } + + testClass { model("incremental/invalidationWithPL/", pattern = "^([^_](.+))$", targetBackend = TargetBackend.JS_IR, recursive = false) } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt index 234b4386c33..48db98f74d1 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/AbstractInvalidationTest.kt @@ -26,8 +26,8 @@ import org.jetbrains.kotlin.ir.backend.js.WholeWorldStageController import org.jetbrains.kotlin.ir.backend.js.ic.* import org.jetbrains.kotlin.ir.backend.js.jsPhases import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.CompilationOutputs -import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.extension import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsGenerationGranularity +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.extension import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.safeModuleName import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC import org.jetbrains.kotlin.js.config.JSConfigurationKeys @@ -49,7 +49,11 @@ import org.junit.jupiter.api.AfterEach import java.io.File import java.util.* -abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend, private val workingDirPath: String) { +abstract class AbstractInvalidationTest( + private val targetBackend: TargetBackend, + private val granularity: JsGenerationGranularity, + private val workingDirPath: String +) { companion object { private val OUT_DIR_PATH = System.getProperty("kotlin.js.test.root.out.dir") ?: error("'kotlin.js.test.root.out.dir' is not set") private val STDLIB_KLIB = File(System.getProperty("kotlin.js.stdlib.klib.path") ?: error("Please set stdlib path")).canonicalPath @@ -153,16 +157,18 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend private val testDir: File, private val sourceDir: File, private val buildDir: File, - private val jsDir: File + private val jsDir: File, ) { private inner class TestStepInfo( val moduleName: String, val modulePath: String, val friends: List, val expectedFileStats: Map>, - val expectedDTS: String? + val expectedDTS: ExpectedFile?, ) + private inner class ExpectedFile(val name: String, val content: String) + private fun setupTestStep(projStep: ProjectInfo.ProjectBuildStep, module: String): TestStepInfo { val projStepId = projStep.id val moduleTestDir = File(testDir, module) @@ -198,7 +204,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend outputKlibFile.canonicalPath, friends.map { it.canonicalPath }, moduleStep.expectedFileStats, - dtsFile?.readText() + dtsFile?.let { ExpectedFile(moduleStep.expectedDTS.single(), it.readText()) } ) } @@ -234,7 +240,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend } private fun verifyJsExecutableProducerBuildModules(stepId: Int, gotRebuilt: List, expectedRebuilt: List) { - val got = gotRebuilt.filter { it != STDLIB_MODULE_NAME } + val got = gotRebuilt.filter { !it.startsWith(STDLIB_MODULE_NAME) } JUnit4Assertions.assertSameElements(got, expectedRebuilt) { "Mismatched rebuilt modules at step $stepId" } @@ -255,16 +261,20 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend } private fun verifyJsCode(stepId: Int, mainModuleName: String, jsFiles: List) { + val testModuleName = "./$mainModuleName${projectInfo.moduleKind.extension}" try { V8IrJsTestChecker.checkWithTestFunctionArgs( files = jsFiles, - testModuleName = "./$mainModuleName${projectInfo.moduleKind.extension}", + testModuleName = testModuleName, testPackageName = null, testFunctionName = BOX_FUNCTION_NAME, testFunctionArgs = "$stepId", expectedResult = "OK", - entryModulePath = jsFiles.last(), - withModuleSystem = projectInfo.moduleKind in setOf(ModuleKind.COMMON_JS, ModuleKind.UMD, ModuleKind.AMD) + withModuleSystem = projectInfo.moduleKind in setOf(ModuleKind.COMMON_JS, ModuleKind.UMD, ModuleKind.AMD), + entryModulePath = when (granularity) { + JsGenerationGranularity.PER_FILE -> jsFiles.find { it.endsWith("m.export.mjs") } + else -> jsFiles.last() + } ) } catch (e: ComparisonFailure) { throw ComparisonFailure("Mismatched box out at step $stepId", e.expected, e.actual) @@ -275,15 +285,20 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend private fun verifyDTS(stepId: Int, testInfo: List) { for (info in testInfo) { + val moduleName = File(info.modulePath).nameWithoutExtension val expectedDTS = info.expectedDTS ?: continue + val dtsFilePath = when (granularity) { + JsGenerationGranularity.PER_FILE -> "$moduleName/${expectedDTS.name.substringBefore('.')}.export.d.ts" + else -> "$moduleName.d.ts" + } - val dtsFile = jsDir.resolve("${File(info.modulePath).nameWithoutExtension}.d.ts") + val dtsFile = jsDir.resolve(dtsFilePath) JUnit4Assertions.assertTrue(dtsFile.exists()) { "Cannot find d.ts (${dtsFile.absolutePath}) file for module ${info.moduleName} at step $stepId" } val gotDTS = dtsFile.readText() - JUnit4Assertions.assertEquals(expectedDTS, gotDTS) { + JUnit4Assertions.assertEquals(expectedDTS.content, gotDTS) { "Mismatched d.ts for module ${info.moduleName} at step $stepId" } } @@ -302,13 +317,22 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend } private fun writeJsCode(stepId: Int, mainModuleName: String, jsOutput: CompilationOutputs): List { - val compiledJsFiles = jsOutput.writeAll(jsDir, mainModuleName, true, mainModuleName, projectInfo.moduleKind).filter { + val compiledJsFiles = jsOutput.writeAll( + jsDir, + mainModuleName, + true, + mainModuleName, + projectInfo.moduleKind + ).filter { it.extension == "js" || it.extension == "mjs" } for (jsCodeFile in compiledJsFiles) { val sourceMappingUrlLine = jsCodeFile.readLines().singleOrNull { it.startsWith(SOURCE_MAPPING_URL_PREFIX) } - JUnit4Assertions.assertEquals("$SOURCE_MAPPING_URL_PREFIX${jsCodeFile.name}.map", sourceMappingUrlLine) { - "Mismatched source map url at step $stepId" + + if (sourceMappingUrlLine != null) { + JUnit4Assertions.assertEquals("$SOURCE_MAPPING_URL_PREFIX${jsCodeFile.name}.map", sourceMappingUrlLine) { + "Mismatched source map url at step $stepId" + } } jsCodeFile.writeAsJsModule(jsCodeFile.readText(), "./${jsCodeFile.name}") @@ -318,6 +342,8 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend } fun execute() { + if (granularity in projectInfo.ignoredGranularities) return + for (projStep in projectInfo.steps) { val testInfo = projStep.order.map { setupTestStep(projStep, it) } @@ -327,6 +353,12 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend } val configuration = createConfiguration(projStep.order.last(), projStep.language, projectInfo.moduleKind) + + val dirtyData = when (granularity) { + JsGenerationGranularity.PER_FILE -> projStep.dirtyJsFiles + else -> projStep.dirtyJsModules + } + val cacheUpdater = CacheUpdater( mainModule = mainModuleInfo.modulePath, allModules = testInfo.mapTo(mutableListOf(STDLIB_KLIB)) { it.modulePath }, @@ -339,7 +371,7 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend JsIrCompilerWithIC( mainModule, cfg, - JsGenerationGranularity.PER_MODULE, + granularity, getPhaseConfig(projStep.id), setOf(FqName(BOX_FUNCTION_NAME)), targetBackend == TargetBackend.JS_IR_ES6 @@ -361,10 +393,10 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend relativeRequirePath = true ) - val (jsOutput, rebuiltModules) = jsExecutableProducer.buildExecutable(granularity = JsGenerationGranularity.PER_MODULE, outJsProgram = true) + val (jsOutput, rebuiltModules) = jsExecutableProducer.buildExecutable(granularity, outJsProgram = true) val writtenFiles = writeJsCode(projStep.id, mainModuleName, jsOutput) - verifyJsExecutableProducerBuildModules(projStep.id, rebuiltModules, projStep.dirtyJS) + verifyJsExecutableProducerBuildModules(projStep.id, rebuiltModules, dirtyData) verifyJsCode(projStep.id, mainModuleName, writtenFiles) verifyDTS(projStep.id, testInfo) } @@ -426,6 +458,6 @@ abstract class AbstractInvalidationTest(private val targetBackend: TargetBackend sourceDir: File, dependencies: Collection, friends: Collection, - outputKlibFile: File + outputKlibFile: File, ) } diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt index eaf317f0546..9652dae6566 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/FirAbstractInvalidationTest.kt @@ -14,18 +14,23 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.ir.backend.js.MainModule import org.jetbrains.kotlin.ir.backend.js.ModulesStructure +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsGenerationGranularity import org.jetbrains.kotlin.test.TargetBackend import java.io.ByteArrayOutputStream import java.io.File import java.io.PrintStream import java.nio.charset.Charset -abstract class AbstractJsFirInvalidationTest : FirAbstractInvalidationTest(TargetBackend.JS_IR, "incrementalOut/invalidationFir") +abstract class AbstractJsFirInvalidationPerFileTest : + FirAbstractInvalidationTest(TargetBackend.JS_IR, JsGenerationGranularity.PER_FILE, "incrementalOut/invalidationFir/perFile") +abstract class AbstractJsFirInvalidationPerModuleTest : + FirAbstractInvalidationTest(TargetBackend.JS_IR, JsGenerationGranularity.PER_MODULE, "incrementalOut/invalidationFir/perModule") abstract class FirAbstractInvalidationTest( targetBackend: TargetBackend, + granularity: JsGenerationGranularity, workingDirPath: String -) : AbstractInvalidationTest(targetBackend, workingDirPath) { +) : AbstractInvalidationTest(targetBackend, granularity, workingDirPath) { private fun getFirInfoFile(defaultInfoFile: File): File { val firInfoFileName = "${defaultInfoFile.nameWithoutExtension}.fir.${defaultInfoFile.extension}" val firInfoFile = defaultInfoFile.parentFile.resolve(firInfoFileName) diff --git a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt index 000bdad329c..0de579ef957 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/incremental/IrAbstractInvalidationTest.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.ir.backend.js.* +import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsGenerationGranularity import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageConfig import org.jetbrains.kotlin.ir.linkage.partial.PartialLinkageLogLevel @@ -20,20 +21,45 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.test.TargetBackend import java.io.File -abstract class AbstractJsIrInvalidationTest : IrAbstractInvalidationTest( +abstract class AbstractJsIrInvalidationPerFileTest : IrAbstractInvalidationTest( targetBackend = TargetBackend.JS_IR, - workingDirPath = "incrementalOut/invalidation" + granularity = JsGenerationGranularity.PER_FILE, + workingDirPath = "incrementalOut/invalidation/perFile" ) -abstract class AbstractJsIrES6InvalidationTest : IrAbstractInvalidationTest( +abstract class AbstractJsIrInvalidationPerModuleTest : IrAbstractInvalidationTest( + targetBackend = TargetBackend.JS_IR, + granularity = JsGenerationGranularity.PER_MODULE, + workingDirPath = "incrementalOut/invalidation/perModule" +) + +abstract class AbstractJsIrES6InvalidationPerFileTest : IrAbstractInvalidationTest( targetBackend = TargetBackend.JS_IR_ES6, - workingDirPath = "incrementalOut/invalidationES6" + granularity = JsGenerationGranularity.PER_FILE, + workingDirPath = "incrementalOut/invalidationES6/perFile" ) -abstract class AbstractJsIrInvalidationWithPLTest : IrAbstractInvalidationTest( - targetBackend = TargetBackend.JS_IR, - workingDirPath = "incrementalOut/invalidationWithPL" -) { +abstract class AbstractJsIrES6InvalidationPerModuleTest : IrAbstractInvalidationTest( + targetBackend = TargetBackend.JS_IR_ES6, + granularity = JsGenerationGranularity.PER_MODULE, + workingDirPath = "incrementalOut/invalidationES6/perModule" +) + +abstract class AbstractJsIrInvalidationPerFileWithPLTest : AbstractJsIrInvalidationWithPLTest( + granularity = JsGenerationGranularity.PER_FILE, + workingDirPath = "incrementalOut/invalidationWithPL/perModule" +) + +abstract class AbstractJsIrInvalidationPerModuleWithPLTest : AbstractJsIrInvalidationWithPLTest( + granularity = JsGenerationGranularity.PER_MODULE, + workingDirPath = "incrementalOut/invalidationWithPL/perModule" +) + +abstract class AbstractJsIrInvalidationWithPLTest(granularity: JsGenerationGranularity, workingDirPath: String) : IrAbstractInvalidationTest( + TargetBackend.JS_IR, + granularity, + workingDirPath + ) { override fun createConfiguration(moduleName: String, language: List, moduleKind: ModuleKind): CompilerConfiguration { val config = super.createConfiguration(moduleName, language, moduleKind) config.setupPartialLinkageConfig(PartialLinkageConfig(PartialLinkageMode.ENABLE, PartialLinkageLogLevel.WARNING)) @@ -43,8 +69,9 @@ abstract class AbstractJsIrInvalidationWithPLTest : IrAbstractInvalidationTest( abstract class IrAbstractInvalidationTest( targetBackend: TargetBackend, + granularity: JsGenerationGranularity, workingDirPath: String -) : AbstractInvalidationTest(targetBackend, workingDirPath) { +) : AbstractInvalidationTest(targetBackend, granularity, workingDirPath) { override fun buildKlib( configuration: CompilerConfiguration, moduleName: String, diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java similarity index 96% rename from js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java rename to js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java index 78ae2ab1d34..cb4a46ecad5 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerFileTestGenerated.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") -public class JsIrInvalidationTestGenerated extends AbstractJsIrInvalidationTest { +public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalidationPerFileTest { @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -343,6 +343,12 @@ public class JsIrInvalidationTestGenerated extends AbstractJsIrInvalidationTest runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); } + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + @Test @TestMetadata("moveExternalDeclarationsBetweenJsModules") public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { @@ -458,9 +464,15 @@ public class JsIrInvalidationTestGenerated extends AbstractJsIrInvalidationTest } @Test - @TestMetadata("typeScriptExports") - public void testTypeScriptExports() throws Exception { - runTest("js/js.translator/testData/incremental/invalidation/typeScriptExports/"); + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); } @Test diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java new file mode 100644 index 00000000000..3050035a340 --- /dev/null +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationPerModuleTestGenerated.java @@ -0,0 +1,501 @@ +/* + * Copyright 2010-2023 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.incremental; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +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.GenerateJsTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("js/js.translator/testData/incremental/invalidation") +@TestDataPath("$PROJECT_ROOT") +public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvalidationPerModuleTest { + @Test + @TestMetadata("addUpdateRemoveDependentFile") + public void testAddUpdateRemoveDependentFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/"); + } + + @Test + @TestMetadata("addUpdateRemoveDependentModule") + public void testAddUpdateRemoveDependentModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/"); + } + + @Test + public void testAllFilesPresentInInvalidation() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/incremental/invalidation"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR, false); + } + + @Test + @TestMetadata("circleExportsUpdate") + public void testCircleExportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleExportsUpdate/"); + } + + @Test + @TestMetadata("circleInlineImportsUpdate") + public void testCircleInlineImportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/"); + } + + @Test + @TestMetadata("class") + public void testClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/class/"); + } + + @Test + @TestMetadata("classFunctionsAndFields") + public void testClassFunctionsAndFields() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); + } + + @Test + @TestMetadata("companionFunction") + public void testCompanionFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionFunction/"); + } + + @Test + @TestMetadata("companionInlineFunction") + public void testCompanionInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionInlineFunction/"); + } + + @Test + @TestMetadata("companionProperties") + public void testCompanionProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionProperties/"); + } + + @Test + @TestMetadata("companionWithStdLibCall") + public void testCompanionWithStdLibCall() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/"); + } + + @Test + @TestMetadata("constVals") + public void testConstVals() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/constVals/"); + } + + @Test + @TestMetadata("crossModuleReferences") + public void testCrossModuleReferences() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/crossModuleReferences/"); + } + + @Test + @TestMetadata("eagerInitialization") + public void testEagerInitialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/eagerInitialization/"); + } + + @Test + @TestMetadata("enum") + public void testEnum() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enum/"); + } + + @Test + @TestMetadata("enumsInInlineFunctions") + public void testEnumsInInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/"); + } + + @Test + @TestMetadata("exceptionsFromInlineFunction") + public void testExceptionsFromInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/"); + } + + @Test + @TestMetadata("exportsThroughInlineFunction") + public void testExportsThroughInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideClassFunctionQualifiers") + public void testFakeOverrideClassFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/"); + } + + @Test + @TestMetadata("fakeOverrideInheritance") + public void testFakeOverrideInheritance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/"); + } + + @Test + @TestMetadata("fakeOverrideInlineExtension") + public void testFakeOverrideInlineExtension() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/"); + } + + @Test + @TestMetadata("fakeOverrideInlineFunction") + public void testFakeOverrideInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideInlineProperty") + public void testFakeOverrideInlineProperty() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/"); + } + + @Test + @TestMetadata("fakeOverrideInterfaceFunctionQualifiers") + public void testFakeOverrideInterfaceFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/"); + } + + @Test + @TestMetadata("fastPath1") + public void testFastPath1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath1/"); + } + + @Test + @TestMetadata("fastPath2") + public void testFastPath2() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath2/"); + } + + @Test + @TestMetadata("friendDependency") + public void testFriendDependency() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/friendDependency/"); + } + + @Test + @TestMetadata("functionDefaultParams") + public void testFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionDefaultParams/"); + } + + @Test + @TestMetadata("functionSignature") + public void testFunctionSignature() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionSignature/"); + } + + @Test + @TestMetadata("functionTypeInterface") + public void testFunctionTypeInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterface/"); + } + + @Test + @TestMetadata("functionTypeInterfaceReflect") + public void testFunctionTypeInterfaceReflect() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/"); + } + + @Test + @TestMetadata("genericFunctions") + public void testGenericFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericFunctions/"); + } + + @Test + @TestMetadata("genericInlineFunctions") + public void testGenericInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericInlineFunctions/"); + } + + @Test + @TestMetadata("gettersAndSettersInlining") + public void testGettersAndSettersInlining() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/"); + } + + @Test + @TestMetadata("inlineBecomeNonInline") + public void testInlineBecomeNonInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/"); + } + + @Test + @TestMetadata("inlineFunctionAnnotations") + public void testInlineFunctionAnnotations() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/"); + } + + @Test + @TestMetadata("inlineFunctionAsFunctionReference") + public void testInlineFunctionAsFunctionReference() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/"); + } + + @Test + @TestMetadata("inlineFunctionAsParam") + public void testInlineFunctionAsParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/"); + } + + @Test + @TestMetadata("inlineFunctionCircleUsage") + public void testInlineFunctionCircleUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/"); + } + + @Test + @TestMetadata("inlineFunctionDefaultParams") + public void testInlineFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/"); + } + + @Test + @TestMetadata("inlineFunctionWithObject") + public void testInlineFunctionWithObject() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); + } + + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + + @Test + @TestMetadata("interfaceOpenMethodsInOpenClass") + public void testInterfaceOpenMethodsInOpenClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/"); + } + + @Test + @TestMetadata("interfaceSuperUsage") + public void testInterfaceSuperUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/"); + } + + @Test + @TestMetadata("interfaceWithDefaultParams") + public void testInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("jsCode") + public void testJsCode() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCode/"); + } + + @Test + @TestMetadata("jsCodeWithConstString") + public void testJsCodeWithConstString() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/"); + } + + @Test + @TestMetadata("jsExport") + public void testJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); + } + + @Test + @TestMetadata("jsModuleAnnotation") + public void testJsModuleAnnotation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/"); + } + + @Test + @TestMetadata("languageVersionSettings") + public void testLanguageVersionSettings() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/languageVersionSettings/"); + } + + @Test + @TestMetadata("localInlineFunction") + public void testLocalInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localInlineFunction/"); + } + + @Test + @TestMetadata("localObjectsLeakThroughInterface") + public void testLocalObjectsLeakThroughInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/"); + } + + @Test + @TestMetadata("mainModuleInvalidation") + public void testMainModuleInvalidation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/"); + } + + @Test + @TestMetadata("moveAndModifyInlineFunction") + public void testMoveAndModifyInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenJsModules") + public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/"); + } + + @Test + @TestMetadata("moveFilesBetweenModules") + public void testMoveFilesBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/"); + } + + @Test + @TestMetadata("moveInlineFunctionBetweenModules") + public void testMoveInlineFunctionBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/"); + } + + @Test + @TestMetadata("nestedClass") + public void testNestedClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nestedClass/"); + } + + @Test + @TestMetadata("nonInlineBecomeInline") + public void testNonInlineBecomeInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); + } + + @Test + @TestMetadata("privateDeclarationLeakThroughDefaultParam") + public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/"); + } + + @Test + @TestMetadata("privateInlineFunction1") + public void testPrivateInlineFunction1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateInlineFunction1/"); + } + + @Test + @TestMetadata("privateObjectsLeakThroughSealedInterface") + public void testPrivateObjectsLeakThroughSealedInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/"); + } + + @Test + @TestMetadata("removeFile") + public void testRemoveFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeFile/"); + } + + @Test + @TestMetadata("removeModule") + public void testRemoveModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeModule/"); + } + + @Test + @TestMetadata("removeUnusedFile") + public void testRemoveUnusedFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeUnusedFile/"); + } + + @Test + @TestMetadata("renameFile") + public void testRenameFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameFile/"); + } + + @Test + @TestMetadata("renameModule") + public void testRenameModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameModule/"); + } + + @Test + @TestMetadata("simple") + public void testSimple() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/simple/"); + } + + @Test + @TestMetadata("splitJoinModule") + public void testSplitJoinModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/splitJoinModule/"); + } + + @Test + @TestMetadata("suspendFunctions") + public void testSuspendFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendFunctions/"); + } + + @Test + @TestMetadata("suspendInterfaceWithDefaultParams") + public void testSuspendInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("toplevelProperties") + public void testToplevelProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/toplevelProperties/"); + } + + @Test + @TestMetadata("transitiveInlineFunction") + public void testTransitiveInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/"); + } + + @Test + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); + } + + @Test + @TestMetadata("unicodeSerializationAndDeserialization") + public void testUnicodeSerializationAndDeserialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/"); + } + + @Test + @TestMetadata("updateExports") + public void testUpdateExports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExports/"); + } + + @Test + @TestMetadata("updateExportsAndInlineImports") + public void testUpdateExportsAndInlineImports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/"); + } + + @Test + @TestMetadata("variance") + public void testVariance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/variance/"); + } +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java similarity index 96% rename from js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java rename to js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java index 6d3a00dbf16..256f7d22060 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerFileTestGenerated.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") -public class JsIrES6InvalidationTestGenerated extends AbstractJsIrES6InvalidationTest { +public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6InvalidationPerFileTest { @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -343,6 +343,12 @@ public class JsIrES6InvalidationTestGenerated extends AbstractJsIrES6Invalidatio runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); } + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + @Test @TestMetadata("moveExternalDeclarationsBetweenJsModules") public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { @@ -458,9 +464,15 @@ public class JsIrES6InvalidationTestGenerated extends AbstractJsIrES6Invalidatio } @Test - @TestMetadata("typeScriptExports") - public void testTypeScriptExports() throws Exception { - runTest("js/js.translator/testData/incremental/invalidation/typeScriptExports/"); + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); } @Test diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java new file mode 100644 index 00000000000..1e1d7ad987d --- /dev/null +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrES6InvalidationPerModuleTestGenerated.java @@ -0,0 +1,501 @@ +/* + * Copyright 2010-2023 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.incremental; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +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.GenerateJsTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("js/js.translator/testData/incremental/invalidation") +@TestDataPath("$PROJECT_ROOT") +public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6InvalidationPerModuleTest { + @Test + @TestMetadata("addUpdateRemoveDependentFile") + public void testAddUpdateRemoveDependentFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/"); + } + + @Test + @TestMetadata("addUpdateRemoveDependentModule") + public void testAddUpdateRemoveDependentModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/"); + } + + @Test + public void testAllFilesPresentInInvalidation() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/incremental/invalidation"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR_ES6, false); + } + + @Test + @TestMetadata("circleExportsUpdate") + public void testCircleExportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleExportsUpdate/"); + } + + @Test + @TestMetadata("circleInlineImportsUpdate") + public void testCircleInlineImportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/"); + } + + @Test + @TestMetadata("class") + public void testClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/class/"); + } + + @Test + @TestMetadata("classFunctionsAndFields") + public void testClassFunctionsAndFields() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); + } + + @Test + @TestMetadata("companionFunction") + public void testCompanionFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionFunction/"); + } + + @Test + @TestMetadata("companionInlineFunction") + public void testCompanionInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionInlineFunction/"); + } + + @Test + @TestMetadata("companionProperties") + public void testCompanionProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionProperties/"); + } + + @Test + @TestMetadata("companionWithStdLibCall") + public void testCompanionWithStdLibCall() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/"); + } + + @Test + @TestMetadata("constVals") + public void testConstVals() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/constVals/"); + } + + @Test + @TestMetadata("crossModuleReferences") + public void testCrossModuleReferences() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/crossModuleReferences/"); + } + + @Test + @TestMetadata("eagerInitialization") + public void testEagerInitialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/eagerInitialization/"); + } + + @Test + @TestMetadata("enum") + public void testEnum() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enum/"); + } + + @Test + @TestMetadata("enumsInInlineFunctions") + public void testEnumsInInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/"); + } + + @Test + @TestMetadata("exceptionsFromInlineFunction") + public void testExceptionsFromInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/"); + } + + @Test + @TestMetadata("exportsThroughInlineFunction") + public void testExportsThroughInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideClassFunctionQualifiers") + public void testFakeOverrideClassFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/"); + } + + @Test + @TestMetadata("fakeOverrideInheritance") + public void testFakeOverrideInheritance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/"); + } + + @Test + @TestMetadata("fakeOverrideInlineExtension") + public void testFakeOverrideInlineExtension() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/"); + } + + @Test + @TestMetadata("fakeOverrideInlineFunction") + public void testFakeOverrideInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideInlineProperty") + public void testFakeOverrideInlineProperty() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/"); + } + + @Test + @TestMetadata("fakeOverrideInterfaceFunctionQualifiers") + public void testFakeOverrideInterfaceFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/"); + } + + @Test + @TestMetadata("fastPath1") + public void testFastPath1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath1/"); + } + + @Test + @TestMetadata("fastPath2") + public void testFastPath2() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath2/"); + } + + @Test + @TestMetadata("friendDependency") + public void testFriendDependency() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/friendDependency/"); + } + + @Test + @TestMetadata("functionDefaultParams") + public void testFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionDefaultParams/"); + } + + @Test + @TestMetadata("functionSignature") + public void testFunctionSignature() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionSignature/"); + } + + @Test + @TestMetadata("functionTypeInterface") + public void testFunctionTypeInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterface/"); + } + + @Test + @TestMetadata("functionTypeInterfaceReflect") + public void testFunctionTypeInterfaceReflect() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/"); + } + + @Test + @TestMetadata("genericFunctions") + public void testGenericFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericFunctions/"); + } + + @Test + @TestMetadata("genericInlineFunctions") + public void testGenericInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericInlineFunctions/"); + } + + @Test + @TestMetadata("gettersAndSettersInlining") + public void testGettersAndSettersInlining() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/"); + } + + @Test + @TestMetadata("inlineBecomeNonInline") + public void testInlineBecomeNonInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/"); + } + + @Test + @TestMetadata("inlineFunctionAnnotations") + public void testInlineFunctionAnnotations() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/"); + } + + @Test + @TestMetadata("inlineFunctionAsFunctionReference") + public void testInlineFunctionAsFunctionReference() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/"); + } + + @Test + @TestMetadata("inlineFunctionAsParam") + public void testInlineFunctionAsParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/"); + } + + @Test + @TestMetadata("inlineFunctionCircleUsage") + public void testInlineFunctionCircleUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/"); + } + + @Test + @TestMetadata("inlineFunctionDefaultParams") + public void testInlineFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/"); + } + + @Test + @TestMetadata("inlineFunctionWithObject") + public void testInlineFunctionWithObject() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); + } + + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + + @Test + @TestMetadata("interfaceOpenMethodsInOpenClass") + public void testInterfaceOpenMethodsInOpenClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/"); + } + + @Test + @TestMetadata("interfaceSuperUsage") + public void testInterfaceSuperUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/"); + } + + @Test + @TestMetadata("interfaceWithDefaultParams") + public void testInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("jsCode") + public void testJsCode() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCode/"); + } + + @Test + @TestMetadata("jsCodeWithConstString") + public void testJsCodeWithConstString() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/"); + } + + @Test + @TestMetadata("jsExport") + public void testJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); + } + + @Test + @TestMetadata("jsModuleAnnotation") + public void testJsModuleAnnotation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/"); + } + + @Test + @TestMetadata("languageVersionSettings") + public void testLanguageVersionSettings() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/languageVersionSettings/"); + } + + @Test + @TestMetadata("localInlineFunction") + public void testLocalInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localInlineFunction/"); + } + + @Test + @TestMetadata("localObjectsLeakThroughInterface") + public void testLocalObjectsLeakThroughInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/"); + } + + @Test + @TestMetadata("mainModuleInvalidation") + public void testMainModuleInvalidation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/"); + } + + @Test + @TestMetadata("moveAndModifyInlineFunction") + public void testMoveAndModifyInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenJsModules") + public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/"); + } + + @Test + @TestMetadata("moveFilesBetweenModules") + public void testMoveFilesBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/"); + } + + @Test + @TestMetadata("moveInlineFunctionBetweenModules") + public void testMoveInlineFunctionBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/"); + } + + @Test + @TestMetadata("nestedClass") + public void testNestedClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nestedClass/"); + } + + @Test + @TestMetadata("nonInlineBecomeInline") + public void testNonInlineBecomeInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); + } + + @Test + @TestMetadata("privateDeclarationLeakThroughDefaultParam") + public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/"); + } + + @Test + @TestMetadata("privateInlineFunction1") + public void testPrivateInlineFunction1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateInlineFunction1/"); + } + + @Test + @TestMetadata("privateObjectsLeakThroughSealedInterface") + public void testPrivateObjectsLeakThroughSealedInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/"); + } + + @Test + @TestMetadata("removeFile") + public void testRemoveFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeFile/"); + } + + @Test + @TestMetadata("removeModule") + public void testRemoveModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeModule/"); + } + + @Test + @TestMetadata("removeUnusedFile") + public void testRemoveUnusedFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeUnusedFile/"); + } + + @Test + @TestMetadata("renameFile") + public void testRenameFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameFile/"); + } + + @Test + @TestMetadata("renameModule") + public void testRenameModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameModule/"); + } + + @Test + @TestMetadata("simple") + public void testSimple() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/simple/"); + } + + @Test + @TestMetadata("splitJoinModule") + public void testSplitJoinModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/splitJoinModule/"); + } + + @Test + @TestMetadata("suspendFunctions") + public void testSuspendFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendFunctions/"); + } + + @Test + @TestMetadata("suspendInterfaceWithDefaultParams") + public void testSuspendInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("toplevelProperties") + public void testToplevelProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/toplevelProperties/"); + } + + @Test + @TestMetadata("transitiveInlineFunction") + public void testTransitiveInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/"); + } + + @Test + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); + } + + @Test + @TestMetadata("unicodeSerializationAndDeserialization") + public void testUnicodeSerializationAndDeserialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/"); + } + + @Test + @TestMetadata("updateExports") + public void testUpdateExports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExports/"); + } + + @Test + @TestMetadata("updateExportsAndInlineImports") + public void testUpdateExportsAndInlineImports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/"); + } + + @Test + @TestMetadata("variance") + public void testVariance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/variance/"); + } +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java similarity index 96% rename from js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java rename to js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java index cef459dc445..b9d8ea3899e 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsFirInvalidationTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileTestGenerated.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("js/js.translator/testData/incremental/invalidation") @TestDataPath("$PROJECT_ROOT") -public class JsFirInvalidationTestGenerated extends AbstractJsFirInvalidationTest { +public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidationPerFileTest { @Test @TestMetadata("addUpdateRemoveDependentFile") public void testAddUpdateRemoveDependentFile() throws Exception { @@ -343,6 +343,12 @@ public class JsFirInvalidationTestGenerated extends AbstractJsFirInvalidationTes runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); } + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + @Test @TestMetadata("moveExternalDeclarationsBetweenJsModules") public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { @@ -458,9 +464,15 @@ public class JsFirInvalidationTestGenerated extends AbstractJsFirInvalidationTes } @Test - @TestMetadata("typeScriptExports") - public void testTypeScriptExports() throws Exception { - runTest("js/js.translator/testData/incremental/invalidation/typeScriptExports/"); + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); } @Test diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationWithPLTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileWithPLTestGenerated.java similarity index 96% rename from js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationWithPLTestGenerated.java rename to js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileWithPLTestGenerated.java index 830706b8a98..d6030ac41f9 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationWithPLTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerFileWithPLTestGenerated.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("js/js.translator/testData/incremental/invalidationWithPL") @TestDataPath("$PROJECT_ROOT") -public class JsIrInvalidationWithPLTestGenerated extends AbstractJsIrInvalidationWithPLTest { +public class JsIrInvalidationPerFileWithPLTestGenerated extends AbstractJsIrInvalidationPerFileWithPLTest { @Test public void testAllFilesPresentInInvalidationWithPL() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/incremental/invalidationWithPL"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR, false); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java new file mode 100644 index 00000000000..d59b83c654c --- /dev/null +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleTestGenerated.java @@ -0,0 +1,501 @@ +/* + * Copyright 2010-2023 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.incremental; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +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.GenerateJsTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("js/js.translator/testData/incremental/invalidation") +@TestDataPath("$PROJECT_ROOT") +public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalidationPerModuleTest { + @Test + @TestMetadata("addUpdateRemoveDependentFile") + public void testAddUpdateRemoveDependentFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/"); + } + + @Test + @TestMetadata("addUpdateRemoveDependentModule") + public void testAddUpdateRemoveDependentModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/"); + } + + @Test + public void testAllFilesPresentInInvalidation() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/incremental/invalidation"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR, false); + } + + @Test + @TestMetadata("circleExportsUpdate") + public void testCircleExportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleExportsUpdate/"); + } + + @Test + @TestMetadata("circleInlineImportsUpdate") + public void testCircleInlineImportsUpdate() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/"); + } + + @Test + @TestMetadata("class") + public void testClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/class/"); + } + + @Test + @TestMetadata("classFunctionsAndFields") + public void testClassFunctionsAndFields() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/"); + } + + @Test + @TestMetadata("companionFunction") + public void testCompanionFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionFunction/"); + } + + @Test + @TestMetadata("companionInlineFunction") + public void testCompanionInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionInlineFunction/"); + } + + @Test + @TestMetadata("companionProperties") + public void testCompanionProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionProperties/"); + } + + @Test + @TestMetadata("companionWithStdLibCall") + public void testCompanionWithStdLibCall() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/"); + } + + @Test + @TestMetadata("constVals") + public void testConstVals() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/constVals/"); + } + + @Test + @TestMetadata("crossModuleReferences") + public void testCrossModuleReferences() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/crossModuleReferences/"); + } + + @Test + @TestMetadata("eagerInitialization") + public void testEagerInitialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/eagerInitialization/"); + } + + @Test + @TestMetadata("enum") + public void testEnum() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enum/"); + } + + @Test + @TestMetadata("enumsInInlineFunctions") + public void testEnumsInInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/"); + } + + @Test + @TestMetadata("exceptionsFromInlineFunction") + public void testExceptionsFromInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/"); + } + + @Test + @TestMetadata("exportsThroughInlineFunction") + public void testExportsThroughInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideClassFunctionQualifiers") + public void testFakeOverrideClassFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/"); + } + + @Test + @TestMetadata("fakeOverrideInheritance") + public void testFakeOverrideInheritance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/"); + } + + @Test + @TestMetadata("fakeOverrideInlineExtension") + public void testFakeOverrideInlineExtension() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/"); + } + + @Test + @TestMetadata("fakeOverrideInlineFunction") + public void testFakeOverrideInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/"); + } + + @Test + @TestMetadata("fakeOverrideInlineProperty") + public void testFakeOverrideInlineProperty() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/"); + } + + @Test + @TestMetadata("fakeOverrideInterfaceFunctionQualifiers") + public void testFakeOverrideInterfaceFunctionQualifiers() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/"); + } + + @Test + @TestMetadata("fastPath1") + public void testFastPath1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath1/"); + } + + @Test + @TestMetadata("fastPath2") + public void testFastPath2() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/fastPath2/"); + } + + @Test + @TestMetadata("friendDependency") + public void testFriendDependency() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/friendDependency/"); + } + + @Test + @TestMetadata("functionDefaultParams") + public void testFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionDefaultParams/"); + } + + @Test + @TestMetadata("functionSignature") + public void testFunctionSignature() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionSignature/"); + } + + @Test + @TestMetadata("functionTypeInterface") + public void testFunctionTypeInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterface/"); + } + + @Test + @TestMetadata("functionTypeInterfaceReflect") + public void testFunctionTypeInterfaceReflect() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/"); + } + + @Test + @TestMetadata("genericFunctions") + public void testGenericFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericFunctions/"); + } + + @Test + @TestMetadata("genericInlineFunctions") + public void testGenericInlineFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/genericInlineFunctions/"); + } + + @Test + @TestMetadata("gettersAndSettersInlining") + public void testGettersAndSettersInlining() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/"); + } + + @Test + @TestMetadata("inlineBecomeNonInline") + public void testInlineBecomeNonInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/"); + } + + @Test + @TestMetadata("inlineFunctionAnnotations") + public void testInlineFunctionAnnotations() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/"); + } + + @Test + @TestMetadata("inlineFunctionAsFunctionReference") + public void testInlineFunctionAsFunctionReference() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/"); + } + + @Test + @TestMetadata("inlineFunctionAsParam") + public void testInlineFunctionAsParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/"); + } + + @Test + @TestMetadata("inlineFunctionCircleUsage") + public void testInlineFunctionCircleUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/"); + } + + @Test + @TestMetadata("inlineFunctionDefaultParams") + public void testInlineFunctionDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/"); + } + + @Test + @TestMetadata("inlineFunctionWithObject") + public void testInlineFunctionWithObject() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/"); + } + + @Test + @TestMetadata("interfaceOpenMethods") + public void testInterfaceOpenMethods() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/"); + } + + @Test + @TestMetadata("interfaceOpenMethodsInOpenClass") + public void testInterfaceOpenMethodsInOpenClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/"); + } + + @Test + @TestMetadata("interfaceSuperUsage") + public void testInterfaceSuperUsage() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/"); + } + + @Test + @TestMetadata("interfaceWithDefaultParams") + public void testInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("jsCode") + public void testJsCode() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCode/"); + } + + @Test + @TestMetadata("jsCodeWithConstString") + public void testJsCodeWithConstString() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/"); + } + + @Test + @TestMetadata("jsExport") + public void testJsExport() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); + } + + @Test + @TestMetadata("jsModuleAnnotation") + public void testJsModuleAnnotation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/"); + } + + @Test + @TestMetadata("languageVersionSettings") + public void testLanguageVersionSettings() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/languageVersionSettings/"); + } + + @Test + @TestMetadata("localInlineFunction") + public void testLocalInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localInlineFunction/"); + } + + @Test + @TestMetadata("localObjectsLeakThroughInterface") + public void testLocalObjectsLeakThroughInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/"); + } + + @Test + @TestMetadata("mainModuleInvalidation") + public void testMainModuleInvalidation() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/"); + } + + @Test + @TestMetadata("moveAndModifyInlineFunction") + public void testMoveAndModifyInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenFiles") + public void testMoveExternalDeclarationsBetweenFiles() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/"); + } + + @Test + @TestMetadata("moveExternalDeclarationsBetweenJsModules") + public void testMoveExternalDeclarationsBetweenJsModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/"); + } + + @Test + @TestMetadata("moveFilesBetweenModules") + public void testMoveFilesBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/"); + } + + @Test + @TestMetadata("moveInlineFunctionBetweenModules") + public void testMoveInlineFunctionBetweenModules() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/"); + } + + @Test + @TestMetadata("nestedClass") + public void testNestedClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nestedClass/"); + } + + @Test + @TestMetadata("nonInlineBecomeInline") + public void testNonInlineBecomeInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/"); + } + + @Test + @TestMetadata("privateDeclarationLeakThroughDefaultParam") + public void testPrivateDeclarationLeakThroughDefaultParam() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/"); + } + + @Test + @TestMetadata("privateInlineFunction1") + public void testPrivateInlineFunction1() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateInlineFunction1/"); + } + + @Test + @TestMetadata("privateObjectsLeakThroughSealedInterface") + public void testPrivateObjectsLeakThroughSealedInterface() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/"); + } + + @Test + @TestMetadata("removeFile") + public void testRemoveFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeFile/"); + } + + @Test + @TestMetadata("removeModule") + public void testRemoveModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeModule/"); + } + + @Test + @TestMetadata("removeUnusedFile") + public void testRemoveUnusedFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/removeUnusedFile/"); + } + + @Test + @TestMetadata("renameFile") + public void testRenameFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameFile/"); + } + + @Test + @TestMetadata("renameModule") + public void testRenameModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/renameModule/"); + } + + @Test + @TestMetadata("simple") + public void testSimple() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/simple/"); + } + + @Test + @TestMetadata("splitJoinModule") + public void testSplitJoinModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/splitJoinModule/"); + } + + @Test + @TestMetadata("suspendFunctions") + public void testSuspendFunctions() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendFunctions/"); + } + + @Test + @TestMetadata("suspendInterfaceWithDefaultParams") + public void testSuspendInterfaceWithDefaultParams() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/"); + } + + @Test + @TestMetadata("toplevelProperties") + public void testToplevelProperties() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/toplevelProperties/"); + } + + @Test + @TestMetadata("transitiveInlineFunction") + public void testTransitiveInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/"); + } + + @Test + @TestMetadata("typeScriptExportsPerFile") + public void testTypeScriptExportsPerFile() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/"); + } + + @Test + @TestMetadata("typeScriptExportsPerModule") + public void testTypeScriptExportsPerModule() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/"); + } + + @Test + @TestMetadata("unicodeSerializationAndDeserialization") + public void testUnicodeSerializationAndDeserialization() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/"); + } + + @Test + @TestMetadata("updateExports") + public void testUpdateExports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExports/"); + } + + @Test + @TestMetadata("updateExportsAndInlineImports") + public void testUpdateExportsAndInlineImports() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/"); + } + + @Test + @TestMetadata("variance") + public void testVariance() throws Exception { + runTest("js/js.translator/testData/incremental/invalidation/variance/"); + } +} diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleWithPLTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleWithPLTestGenerated.java new file mode 100644 index 00000000000..6afb7f5a062 --- /dev/null +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/incremental/JsIrInvalidationPerModuleWithPLTestGenerated.java @@ -0,0 +1,75 @@ +/* + * Copyright 2010-2023 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.incremental; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TargetBackend; +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.GenerateJsTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("js/js.translator/testData/incremental/invalidationWithPL") +@TestDataPath("$PROJECT_ROOT") +public class JsIrInvalidationPerModuleWithPLTestGenerated extends AbstractJsIrInvalidationPerModuleWithPLTest { + @Test + public void testAllFilesPresentInInvalidationWithPL() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("js/js.translator/testData/incremental/invalidationWithPL"), Pattern.compile("^([^_](.+))$"), null, TargetBackend.JS_IR, false); + } + + @Test + @TestMetadata("changeFunctionSignature") + public void testChangeFunctionSignature() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/changeFunctionSignature/"); + } + + @Test + @TestMetadata("interfaceBecomeClass") + public void testInterfaceBecomeClass() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/interfaceBecomeClass/"); + } + + @Test + @TestMetadata("removeFunction") + public void testRemoveFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeFunction/"); + } + + @Test + @TestMetadata("removeFunctionFromBlock") + public void testRemoveFunctionFromBlock() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromBlock/"); + } + + @Test + @TestMetadata("removeFunctionFromChainCall") + public void testRemoveFunctionFromChainCall() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromChainCall/"); + } + + @Test + @TestMetadata("removeFunctionFromElvis") + public void testRemoveFunctionFromElvis() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromElvis/"); + } + + @Test + @TestMetadata("removeFunctionFromInline") + public void testRemoveFunctionFromInline() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromInline/"); + } + + @Test + @TestMetadata("removeInlineFunction") + public void testRemoveInlineFunction() throws Exception { + runTest("js/js.translator/testData/incremental/invalidationWithPL/removeInlineFunction/"); + } +} diff --git a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/project.info b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/project.info index 30679d73bc6..1902725d080 100644 --- a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/project.info +++ b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentFile/project.info @@ -1,17 +1,26 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib2/l2, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib2/l2, main/m STEP 2: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1a, lib1/l1b STEP 3..4: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib2/l2, main/m STEP 5: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1a, lib1/l1b STEP 6..7: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib2/l2, main/m \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/project.info b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/project.info index 7ee2b46e3d5..d646e5b5da8 100644 --- a/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/project.info +++ b/js/js.translator/testData/incremental/invalidation/addUpdateRemoveDependentModule/project.info @@ -2,13 +2,21 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, main - dirty js: lib1, main -STEP 1..2: + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export +STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib2/l2, main/m +STEP 2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib2/l2, main/m STEP 3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/m STEP 4: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1a, lib1/l1b diff --git a/js/js.translator/testData/incremental/invalidation/circleExportsUpdate/project.info b/js/js.translator/testData/incremental/invalidation/circleExportsUpdate/project.info index 0b4e2109318..f34a3bc54b2 100644 --- a/js/js.translator/testData/incremental/invalidation/circleExportsUpdate/project.info +++ b/js/js.translator/testData/incremental/invalidation/circleExportsUpdate/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export STEP 1..3: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3 diff --git a/js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/project.info b/js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/project.info index 912abf292a5..6b701fb1a69 100644 --- a/js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/project.info +++ b/js/js.translator/testData/incremental/invalidation/circleInlineImportsUpdate/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m diff --git a/js/js.translator/testData/incremental/invalidation/class/project.info b/js/js.translator/testData/incremental/invalidation/class/project.info index e604fbca6b9..7472ab233e0 100644 --- a/js/js.translator/testData/incremental/invalidation/class/project.info +++ b/js/js.translator/testData/incremental/invalidation/class/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/testEquals, main/testToString, main/testHashCode, main/m, main/m.export STEP 1..3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/testEquals, main/testToString, main/testHashCode, main/m diff --git a/js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/project.info b/js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/project.info index 888fbb20690..9947923d645 100644 --- a/js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/project.info +++ b/js/js.translator/testData/incremental/invalidation/classFunctionsAndFields/project.info @@ -2,22 +2,29 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 2..3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 4..7: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 8: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 9: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 10..11: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/companionFunction/project.info b/js/js.translator/testData/incremental/invalidation/companionFunction/project.info index 3a84c058f4e..34881b09aa9 100644 --- a/js/js.translator/testData/incremental/invalidation/companionFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/companionFunction/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/companionInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/companionInlineFunction/project.info index cec28fa150e..fc8b23ee646 100644 --- a/js/js.translator/testData/incremental/invalidation/companionInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/companionInlineFunction/project.info @@ -1,8 +1,14 @@ MODULES: lib1, lib2, main -STEP 0..4: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1..4: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m STEP 5: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/companionProperties/project.info b/js/js.translator/testData/incremental/invalidation/companionProperties/project.info index 603f8f10c9d..5fe78a6c064 100644 --- a/js/js.translator/testData/incremental/invalidation/companionProperties/project.info +++ b/js/js.translator/testData/incremental/invalidation/companionProperties/project.info @@ -2,19 +2,41 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, lib2/l2string, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2int STEP 2: libs: lib1, lib2, main - dirty js: lib1 -STEP 3..4: + dirty js modules: lib1 + dirty js files: lib1/l1 +STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2pair +STEP 4: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2func, lib2/l2string STEP 5: libs: lib1, lib2, main - dirty js: lib1 -STEP 6..10: + dirty js modules: lib1 + dirty js files: lib1/l1 +STEP 6: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2func, lib2/l2string, lib2/l2pair +STEP 7: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1 +STEP 8: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2int +STEP 9..10: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2int diff --git a/js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/project.info b/js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/project.info index 9fa58b9ec0d..97b168f6ca1 100644 --- a/js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/project.info +++ b/js/js.translator/testData/incremental/invalidation/companionWithStdLibCall/project.info @@ -2,10 +2,13 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/f, main/m, main/m.export STEP 1..2: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 3: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/f diff --git a/js/js.translator/testData/incremental/invalidation/constVals/project.fir.info b/js/js.translator/testData/incremental/invalidation/constVals/project.fir.info index 2b72f8c741f..ce25de70921 100644 --- a/js/js.translator/testData/incremental/invalidation/constVals/project.fir.info +++ b/js/js.translator/testData/incremental/invalidation/constVals/project.fir.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, main -STEP 0..3: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1..3: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/constVals/project.info b/js/js.translator/testData/incremental/invalidation/constVals/project.info index 872df0ac75d..b6aaddd92a2 100644 --- a/js/js.translator/testData/incremental/invalidation/constVals/project.info +++ b/js/js.translator/testData/incremental/invalidation/constVals/project.info @@ -2,13 +2,17 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/crossModuleReferences/project.info b/js/js.translator/testData/incremental/invalidation/crossModuleReferences/project.info index ad98b79cbef..5f7f59d5c06 100644 --- a/js/js.translator/testData/incremental/invalidation/crossModuleReferences/project.info +++ b/js/js.translator/testData/incremental/invalidation/crossModuleReferences/project.info @@ -2,13 +2,17 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1..4: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 5: libs: lib1, lib2, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 6: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/eagerInitialization/project.info b/js/js.translator/testData/incremental/invalidation/eagerInitialization/project.info index 0b4e2109318..8df84dacff5 100644 --- a/js/js.translator/testData/incremental/invalidation/eagerInitialization/project.info +++ b/js/js.translator/testData/incremental/invalidation/eagerInitialization/project.info @@ -1,8 +1,10 @@ +IGNORE_PER_FILE: true + MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main STEP 1..3: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 diff --git a/js/js.translator/testData/incremental/invalidation/enum/project.info b/js/js.translator/testData/incremental/invalidation/enum/project.info index 5aed1a56d19..d86444f65f0 100644 --- a/js/js.translator/testData/incremental/invalidation/enum/project.info +++ b/js/js.translator/testData/incremental/invalidation/enum/project.info @@ -2,15 +2,19 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 2: language: +EnumEntries libs: lib1, main - dirty js: main, lib1 + dirty js modules: main, lib1 + dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export STEP 3: language: +EnumEntries libs: lib1, main - dirty js: main, lib1 + dirty js modules: main, lib1 + dirty js files: lib1/l1, main/testEnumEntries diff --git a/js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/project.info b/js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/project.info index b6968123d1d..104cb1593e9 100644 --- a/js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/project.info +++ b/js/js.translator/testData/incremental/invalidation/enumsInInlineFunctions/project.info @@ -1,5 +1,14 @@ MODULES: lib1, lib2, main -STEP 0..4: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1..2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 +STEP 3..4: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/project.info index 7647b6c3a18..9d1a12deda9 100644 --- a/js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/exceptionsFromInlineFunction/project.info @@ -2,25 +2,33 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib2 + dirty js files: lib2/l2 STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 4: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2 + dirty js files: lib2/l2 STEP 5..6: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 7: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2 STEP 8: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/project.info index 6856f99a874..8feef46a3ef 100644 --- a/js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/exportsThroughInlineFunction/project.info @@ -1,11 +1,18 @@ MODULES: lib1, main -STEP 0..4: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m, main/m.export +STEP 1..4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m STEP 5: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 6..7: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info index 01e14a616c3..7d4e2c809e3 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideClassFunctionQualifiers/project.info @@ -1,23 +1,34 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 3: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 4: libs: lib1, lib2, main - dirty js: main, lib1, lib2 + dirty js modules: main, lib1, lib2 + dirty js files: lib1/l1, lib2/l2, main/m STEP 5: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 6..10: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m STEP 11: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/project.info index 95044474783..8d599d2c26a 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInheritance/project.info @@ -2,7 +2,25 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main -STEP 1..5: + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m, main/m.export +STEP 1: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/B, lib1/C, main/classABC, main/m +STEP 3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m +STEP 4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/B, lib1/C, main/classABC, main/m +STEP 5: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/project.info index 1733e265b51..5ba54a42900 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineExtension/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/classA, main/m, main/m.export STEP 1..4: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/classA, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info index 31bf237a5e9..0997aa0b0d2 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineFunction/project.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, main -STEP 0..2: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1..2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/project.info index 74a808765e7..c6b63f5e31b 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInlineProperty/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/classA, main/m, main/m.export STEP 1..2: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/classA, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info index 05bcd8b3fcb..953afe51b00 100644 --- a/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info +++ b/js/js.translator/testData/incremental/invalidation/fakeOverrideInterfaceFunctionQualifiers/project.info @@ -1,26 +1,38 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/class2, lib2/object2, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/class2, lib2/object2, main/m STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/class2, lib2/object2 STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/class2, lib2/object2 STEP 4: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/class2, lib2/object2, main/m STEP 5: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 6: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/class2, lib2/object2, main/m STEP 7: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/class2, lib2/object2 STEP 8: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/class2, lib2/object2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/fastPath1/project.info b/js/js.translator/testData/incremental/invalidation/fastPath1/project.info index ec60a5cb1eb..01d9e56bb09 100644 --- a/js/js.translator/testData/incremental/invalidation/fastPath1/project.info +++ b/js/js.translator/testData/incremental/invalidation/fastPath1/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/fastPath2/project.info b/js/js.translator/testData/incremental/invalidation/fastPath2/project.info index ce9a1155f6b..9549828d811 100644 --- a/js/js.translator/testData/incremental/invalidation/fastPath2/project.info +++ b/js/js.translator/testData/incremental/invalidation/fastPath2/project.info @@ -2,6 +2,7 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main diff --git a/js/js.translator/testData/incremental/invalidation/friendDependency/project.info b/js/js.translator/testData/incremental/invalidation/friendDependency/project.info index ff7fdf220dc..e42f0dee435 100644 --- a/js/js.translator/testData/incremental/invalidation/friendDependency/project.info +++ b/js/js.translator/testData/incremental/invalidation/friendDependency/project.info @@ -2,22 +2,29 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/publicClass, main/test, main/m, main/m.export STEP 1..2: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/publicClass, main/test STEP 4: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/publicClass, main/test STEP 5..6: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/publicClass, main/test STEP 7: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/publicClass, main/test STEP 8..9: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/publicClass diff --git a/js/js.translator/testData/incremental/invalidation/functionDefaultParams/project.info b/js/js.translator/testData/incremental/invalidation/functionDefaultParams/project.info index 86a27e2ae08..4178bed6a0a 100644 --- a/js/js.translator/testData/incremental/invalidation/functionDefaultParams/project.info +++ b/js/js.translator/testData/incremental/invalidation/functionDefaultParams/project.info @@ -2,13 +2,17 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 2: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 3: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/functionSignature/project.info b/js/js.translator/testData/incremental/invalidation/functionSignature/project.info index 0991bcba6cb..f82f10a674b 100644 --- a/js/js.translator/testData/incremental/invalidation/functionSignature/project.info +++ b/js/js.translator/testData/incremental/invalidation/functionSignature/project.info @@ -2,13 +2,17 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1..6: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 7..8: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 9..16: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/functionTypeInterface/project.info b/js/js.translator/testData/incremental/invalidation/functionTypeInterface/project.info index b336590ba6b..78f166ffbdc 100644 --- a/js/js.translator/testData/incremental/invalidation/functionTypeInterface/project.info +++ b/js/js.translator/testData/incremental/invalidation/functionTypeInterface/project.info @@ -2,19 +2,33 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main -STEP 1..8: + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2b, lib2/l2a, main/m, main/m.export +STEP 1..4: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2a +STEP 5: + libs: lib1, lib2, main + dirty js modules: lib2 + dirty js files: lib2/l2b +STEP 6..8: + libs: lib1, lib2, main + dirty js modules: lib2 + dirty js files: lib2/l2a STEP 9: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2a STEP 10: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2a STEP 11..12: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2a STEP 13..15: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2a diff --git a/js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/project.info b/js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/project.info index c8d9369c64b..a65663a220e 100644 --- a/js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/project.info +++ b/js/js.translator/testData/incremental/invalidation/functionTypeInterfaceReflect/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, lib1/C, main/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, lib1/B, main/test +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/A, main/test +STEP 3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/C, main/test diff --git a/js/js.translator/testData/incremental/invalidation/genericFunctions/project.info b/js/js.translator/testData/incremental/invalidation/genericFunctions/project.info index 1733e265b51..95900bd4f49 100644 --- a/js/js.translator/testData/incremental/invalidation/genericFunctions/project.info +++ b/js/js.translator/testData/incremental/invalidation/genericFunctions/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1..4: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/project.info b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/project.info index eece1761265..8f0434bfe07 100644 --- a/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/project.info +++ b/js/js.translator/testData/incremental/invalidation/genericInlineFunctions/project.info @@ -1,8 +1,14 @@ MODULES: lib1, main, libProxy -STEP 0..7: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..7: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 8..23: libs: lib1, libProxy, main - dirty js: lib1, libProxy, main + dirty js modules: lib1, libProxy, main + dirty js files: lib1/l1, libProxy/proxy, main/m diff --git a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info index d0dbe7c8926..0daafad9237 100644 --- a/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info +++ b/js/js.translator/testData/incremental/invalidation/gettersAndSettersInlining/project.info @@ -1,8 +1,14 @@ MODULES: lib1, lib2, main -STEP 0..3: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1..3: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m STEP 4: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/project.info b/js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/project.info index 48eccd6bfa0..eba29218f54 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineBecomeNonInline/project.info @@ -1,8 +1,14 @@ MODULES: lib1, main -STEP 0..1: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 2: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/project.info index 8ae59518ca8..47a5e01e4bf 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionAnnotations/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..4: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l1.export, main/m +STEP 2..3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l1.export, main/m +STEP 4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/project.info index c8d9369c64b..16c89f0d45b 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionAsFunctionReference/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l2, main/m +STEP 3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/project.info index a9a8e91b8e5..6215b87a451 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionAsParam/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..9: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..9: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/project.info index 912abf292a5..80f5b5f6cee 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionCircleUsage/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/project.info index c8d9369c64b..e902cbd0f6b 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionDefaultParams/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/project.info b/js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/project.info index aeddb99e1aa..e6ef57b6039 100644 --- a/js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/project.info +++ b/js/js.translator/testData/incremental/invalidation/inlineFunctionWithObject/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info index 75ed7dbf589..93dc87701bb 100644 --- a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethods/project.info @@ -1,14 +1,22 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/InterfaceB, lib1/InterfaceC, lib2/MyClass, lib2/GetA, lib2/GetB, lib2/GetC, main/test, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/InterfaceB, lib1/InterfaceC, lib2/MyClass, lib2/GetA, lib2/GetB, lib2/GetC, main/test STEP 2: libs: lib1, lib2, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/InterfaceB, lib1/InterfaceC, main/test STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/InterfaceB, lib1/InterfaceC, lib2/MyClass, lib2/GetA, lib2/GetB, lib2/GetC, main/test STEP 4: libs: lib1, lib2, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/InterfaceA, lib1/InterfaceB, lib1/InterfaceC, main/test diff --git a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/project.info b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/project.info index 1637e918e31..db780c01afa 100644 --- a/js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/project.info +++ b/js/js.translator/testData/incremental/invalidation/interfaceOpenMethodsInOpenClass/project.info @@ -2,19 +2,25 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/ClassB, lib2/MyClass, lib2/GetA, lib2/GetB, main/test, main/m, main/m.export STEP 1..3: libs: lib1, lib2, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/InterfaceA, lib1/ClassB, main/test STEP 4: libs: lib1, lib2, main - dirty js: main + dirty js modules: main + dirty js files: main/test STEP 5: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/ClassB, lib2/MyClass, lib2/GetA, main/test STEP 6: libs: lib1, lib2, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/InterfaceA, lib1/ClassB, main/test STEP 7: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/InterfaceA, lib1/ClassB, lib2/MyClass, main/test diff --git a/js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/project.info b/js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/project.info index 3cc679c1435..8b62a7f0771 100644 --- a/js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/project.info +++ b/js/js.translator/testData/incremental/invalidation/interfaceSuperUsage/project.info @@ -1,29 +1,42 @@ MODULES: lib1, main -STEP 0..1: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/Interface, lib1/ClassA, lib1/ClassB, main/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ClassB, main/test STEP 2: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/Interface STEP 3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ClassB, main/test STEP 4: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/ClassA, lib1/ClassB, lib1/Interface STEP 5: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ClassB, main/test STEP 6: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/Interface, lib1/ClassB STEP 7: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ClassB, main/test STEP 8: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/ClassA STEP 9..10: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ClassA, main/test diff --git a/js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/project.info b/js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/project.info index 0a516bb94a3..193204ca4b2 100644 --- a/js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/project.info +++ b/js/js.translator/testData/incremental/invalidation/interfaceWithDefaultParams/project.info @@ -2,25 +2,33 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, lib2/l2test, main/m, main/m.export STEP 1..2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2test STEP 3: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2test STEP 4: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2test STEP 5: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2test STEP 6: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2test STEP 7: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2test STEP 8: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/jsCode/project.info b/js/js.translator/testData/incremental/invalidation/jsCode/project.info index c8d9369c64b..e902cbd0f6b 100644 --- a/js/js.translator/testData/incremental/invalidation/jsCode/project.info +++ b/js/js.translator/testData/incremental/invalidation/jsCode/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.fir.info b/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.fir.info new file mode 100644 index 00000000000..3ea0c9b7115 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.fir.info @@ -0,0 +1,34 @@ +MODULES: lib1, main + +STEP 0: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js +STEP 2: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js +STEP 3: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js, lib1/l1 +STEP 4: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/test +STEP 5: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js, lib1/l1 +STEP 6: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js +STEP 7: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js, lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.info b/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.info index aa728a8c0c3..8a3dc88734c 100644 --- a/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.info +++ b/js/js.translator/testData/incremental/invalidation/jsCodeWithConstString/project.info @@ -2,7 +2,21 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main -STEP 1..7: + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export +STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/js +STEP 2..3: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js, lib1/l1 +STEP 4: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/test +STEP 5..7: + libs: lib1, main + dirty js modules: lib1 + dirty js files: lib1/js, lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/jsExport/project.info b/js/js.translator/testData/incremental/invalidation/jsExport/project.info index 1ba33e23c15..0f412ed2a5a 100644 --- a/js/js.translator/testData/incremental/invalidation/jsExport/project.info +++ b/js/js.translator/testData/incremental/invalidation/jsExport/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..6: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l1.export, main/m +STEP 2..3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l1.export, main/m +STEP 4..6: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, lib1/l1.export, main/m \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/project.info b/js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/project.info index a506eed60e3..41251fc3076 100644 --- a/js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/project.info +++ b/js/js.translator/testData/incremental/invalidation/jsModuleAnnotation/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..1: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ObjectA, lib1/ObjectB, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/ObjectB, main/m diff --git a/js/js.translator/testData/incremental/invalidation/languageVersionSettings/project.info b/js/js.translator/testData/incremental/invalidation/languageVersionSettings/project.info index 43a103790a2..6c21be44e08 100644 --- a/js/js.translator/testData/incremental/invalidation/languageVersionSettings/project.info +++ b/js/js.translator/testData/incremental/invalidation/languageVersionSettings/project.info @@ -2,19 +2,23 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1: language: +TypeAliases libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 2: language: +TypeAliases, +BoundCallableReferences, +LocalDelegatedProperties, +TopLevelSealedInheritance libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 3: language: +TypeAliases, +BoundCallableReferences, +TopLevelSealedInheritance libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 4: language: +BoundCallableReferences, +TopLevelSealedInheritance, +TypeAliases libs: lib1, main @@ -24,7 +28,8 @@ STEP 5: STEP 6: language: +BoundCallableReferences, -TypeAliases, +TopLevelSealedInheritance libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 7: language: +TopLevelSealedInheritance, +BoundCallableReferences, +TypeAliases libs: lib1, main diff --git a/js/js.translator/testData/incremental/invalidation/localInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/localInlineFunction/project.info index 425cf7cc77f..3b4f501feba 100644 --- a/js/js.translator/testData/incremental/invalidation/localInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/localInlineFunction/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/project.info b/js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/project.info index 10474564688..f529ee1fa07 100644 --- a/js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/project.info +++ b/js/js.translator/testData/incremental/invalidation/localObjectsLeakThroughInterface/project.info @@ -2,16 +2,25 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/classA, lib1/interface STEP 2: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/classA, lib1/interface, main/test STEP 3: libs: lib1, main - dirty js: main -STEP 4..5: + dirty js modules: main + dirty js files: main/test +STEP 4: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/interface, lib1/classA, main/test +STEP 5: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/interface, main/test diff --git a/js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/project.info b/js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/project.info index 5b92e0e5472..8ff11c26dd4 100644 --- a/js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/project.info +++ b/js/js.translator/testData/incremental/invalidation/mainModuleInvalidation/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m0, main/m1, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/m diff --git a/js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/project.info index 425cf7cc77f..c2884e1cd61 100644 --- a/js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/moveAndModifyInlineFunction/project.info @@ -2,7 +2,9 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, lib1/test, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1a, lib1/l1b, lib1/test diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a-new.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a-new.mjs new file mode 100644 index 00000000000..44204df4fe3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a-new.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 3; } \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a.mjs new file mode 100644 index 00000000000..fae8403c223 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-a.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 0; } diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b-new.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b-new.mjs new file mode 100644 index 00000000000..85aad16b0f7 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b-new.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 2; } \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b.mjs new file mode 100644 index 00000000000..7ad1f9d554e --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-b.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 1; } \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c-new.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c-new.mjs new file mode 100644 index 00000000000..418d7d68ad3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c-new.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 5; } \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c.mjs b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c.mjs new file mode 100644 index 00000000000..c7c341c9cac --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/js-module-c.mjs @@ -0,0 +1 @@ +export function externalDemoFunction() { return 4; } \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.0.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.0.kt new file mode 100644 index 00000000000..7fc50a2df83 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.0.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-a.mjs") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.1.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.1.kt new file mode 100644 index 00000000000..fb70f4c1367 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.1.kt @@ -0,0 +1 @@ +@file:JsModule("../js-module-a.mjs") diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.4.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.4.kt new file mode 100644 index 00000000000..427a6253695 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleA.4.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-a-new.mjs") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.0.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.0.kt new file mode 100644 index 00000000000..d029119e924 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.0.kt @@ -0,0 +1 @@ +@file:JsModule("../js-module-b.mjs") diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.1.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.1.kt new file mode 100644 index 00000000000..462cb35993a --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.1.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-b.mjs") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.2.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.2.kt new file mode 100644 index 00000000000..8286443e9be --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/JsModuleB.2.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-b-new.mjs") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.0.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.0.kt new file mode 100644 index 00000000000..dedf453dd68 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.0.kt @@ -0,0 +1 @@ +fun demoFunction() = externalDemoFunction() diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.3.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.3.kt new file mode 100644 index 00000000000..a2aa596597e --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/demo.3.kt @@ -0,0 +1 @@ +fun demoFunction() = -1 diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/module.info b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/module.info new file mode 100644 index 00000000000..d762c70ae3a --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib1/module.info @@ -0,0 +1,32 @@ +STEP 0: + modifications: + U : JsModuleA.0.kt -> JsModuleA.kt + U : JsModuleB.0.kt -> JsModuleB.kt + U : demo.0.kt -> demo.kt + added file: JsModuleA.kt, JsModuleB.kt, demo.kt +STEP 1: + modifications: + U : JsModuleA.1.kt -> JsModuleA.kt + U : JsModuleB.1.kt -> JsModuleB.kt + modified ir: JsModuleA.kt, JsModuleB.kt + updated imports: demo.kt +STEP 2: + modifications: + U : JsModuleB.2.kt -> JsModuleB.kt + modified ir: JsModuleB.kt + updated imports: demo.kt +STEP 3: + modifications: + U : demo.3.kt -> demo.kt + modified ir: demo.kt +STEP 4: + modifications: + U : JsModuleA.4.kt -> JsModuleA.kt + U : JsModuleB.0.kt -> JsModuleB.kt + modified ir: JsModuleA.kt, JsModuleB.kt +STEP 5: + modifications: + U : JsModuleA.1.kt -> JsModuleA.kt + modified ir: JsModuleA.kt + updated exports: JsModuleA.kt +STEP 6: diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.5.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.5.kt new file mode 100644 index 00000000000..7b166e5a343 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.5.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-c") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.6.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.6.kt new file mode 100644 index 00000000000..4b292fff747 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/JsModuleC.6.kt @@ -0,0 +1,3 @@ +@file:JsModule("../js-module-c-new") + +external fun externalDemoFunction(): Int diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/module.info b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/module.info new file mode 100644 index 00000000000..ad694fa2dc9 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/module.info @@ -0,0 +1,28 @@ +STEP 0: + dependencies: lib1 + modifications: + U : test.0.kt -> test.kt + added file: test.kt +STEP 1..2: + dependencies: lib1 +STEP 3: + dependencies: lib1 + modifications: + U : test.3.kt -> test.kt + modified ir: test.kt +STEP 4: + dependencies: lib1 + updated imports: test.kt +STEP 5: + dependencies: lib1 + modifications: + U : JsModuleC.5.kt -> JsModuleC.kt + added file: JsModuleC.kt + updated exports: JsModuleC.kt + updated imports: test.kt +STEP 6: + dependencies: lib1 + modifications: + U : JsModuleC.6.kt -> JsModuleC.kt + modified ir: JsModuleC.kt + updated imports: test.kt diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.0.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.0.kt new file mode 100644 index 00000000000..bcb0e15bdf2 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.0.kt @@ -0,0 +1 @@ +fun testFunction() = demoFunction() diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.3.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.3.kt new file mode 100644 index 00000000000..3d000b75630 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/lib2/test.3.kt @@ -0,0 +1 @@ +fun testFunction() = externalDemoFunction() + 1 diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/m.kt b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/m.kt new file mode 100644 index 00000000000..d989a9223c3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/m.kt @@ -0,0 +1,7 @@ +fun box(stepId: Int): String { + val x = testFunction() + if (x != stepId) { + return "Fail: $x != $stepId" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/module.info b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/module.info new file mode 100644 index 00000000000..666f53f4b98 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/main/module.info @@ -0,0 +1,5 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt +STEP 1..6: + dependencies: lib1, lib2 diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/project.info b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/project.info new file mode 100644 index 00000000000..aa364a3ab8d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenFiles/project.info @@ -0,0 +1,25 @@ +IGNORE_PER_MODULE: true + +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB, lib2/test, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB +STEP 2: + libs: lib1, lib2, main + dirty js files: lib1/demo, lib1/JsModuleB +STEP 3: + libs: lib1, lib2, main + dirty js files: lib1/demo, lib2/test +STEP 4: + libs: lib1, lib2, main + dirty js files: lib1/JsModuleA, lib1/JsModuleB, lib2/test +STEP 5: + libs: lib1, lib2, main + dirty js files: lib1/JsModuleA, lib2/JsModuleC, lib2/test +STEP 6: + libs: lib1, lib2, main + dirty js files: lib2/JsModuleC, lib2/test diff --git a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/project.info b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/project.info index 92800dab180..34a0121d90c 100644 --- a/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/project.info +++ b/js/js.translator/testData/incremental/invalidation/moveExternalDeclarationsBetweenJsModules/project.info @@ -1,14 +1,16 @@ +IGNORE_PER_FILE: true + MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main STEP 1..2: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 STEP 3..5: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 STEP 6: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 diff --git a/js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/project.info b/js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/project.info index f9e75d15662..0f20ff826c8 100644 --- a/js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/project.info +++ b/js/js.translator/testData/incremental/invalidation/moveFilesBetweenModules/project.info @@ -1,5 +1,14 @@ MODULES: lib1, lib2, lib3, main -STEP 0..2: +STEP 0: libs: lib1, lib2, lib3, main - dirty js: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/l11, lib1/l12, lib2/l21, lib3/l3, main/m, main/m.export +STEP 1: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib2/l21, lib2/l22, lib3/l3, main/m +STEP 2: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/l12_n, lib2/l21, lib3/l3, main/m diff --git a/js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/project.info b/js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/project.info index 3469cfa7088..3e2550f7015 100644 --- a/js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/project.info +++ b/js/js.translator/testData/incremental/invalidation/moveInlineFunctionBetweenModules/project.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, lib3, main -STEP 0..1: +STEP 0: libs: lib1, lib2, lib3, main - dirty js: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/l1, lib2/l2, lib3/l3, main/m, main/m.export +STEP 1: + libs: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/l1, lib2/l2, lib2/l22, lib3/l3, main/m diff --git a/js/js.translator/testData/incremental/invalidation/nestedClass/project.info b/js/js.translator/testData/incremental/invalidation/nestedClass/project.info index 88ec3a11501..bfa71d9498b 100644 --- a/js/js.translator/testData/incremental/invalidation/nestedClass/project.info +++ b/js/js.translator/testData/incremental/invalidation/nestedClass/project.info @@ -1,20 +1,30 @@ MODULES: lib1, main -STEP 0..1: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 2: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 3: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 4: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 5: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 6: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/project.info b/js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/project.info index 4621764cc7f..7e1fd8b652b 100644 --- a/js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/project.info +++ b/js/js.translator/testData/incremental/invalidation/nonInlineBecomeInline/project.info @@ -1,8 +1,14 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m STEP 4: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/project.info b/js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/project.info index 93c47432020..a0edf7d288a 100644 --- a/js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/project.info +++ b/js/js.translator/testData/incremental/invalidation/privateDeclarationLeakThroughDefaultParam/project.info @@ -1,5 +1,30 @@ MODULES: main -STEP 0..13: +STEP 0: libs: main - dirty js: main + dirty js modules: main + dirty js files: main/f, main/m, main/m.export +STEP 1..2: + libs: main + dirty js modules: main + dirty js files: main/f +STEP 3..8: + libs: main + dirty js modules: main + dirty js files: main/f, main/m +STEP 9: + libs: main + dirty js modules: main + dirty js files: main/f +STEP 10: + libs: main + dirty js modules: main + dirty js files: main/f, main/m +STEP 11: + libs: main + dirty js modules: main + dirty js files: main/f +STEP 12..13: + libs: main + dirty js modules: main + dirty js files: main/f, main/m diff --git a/js/js.translator/testData/incremental/invalidation/privateInlineFunction1/project.info b/js/js.translator/testData/incremental/invalidation/privateInlineFunction1/project.info index 3a84c058f4e..34881b09aa9 100644 --- a/js/js.translator/testData/incremental/invalidation/privateInlineFunction1/project.info +++ b/js/js.translator/testData/incremental/invalidation/privateInlineFunction1/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/project.info b/js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/project.info index 10474564688..b55216d024c 100644 --- a/js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/project.info +++ b/js/js.translator/testData/incremental/invalidation/privateObjectsLeakThroughSealedInterface/project.info @@ -2,16 +2,25 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/classA, lib1/interface STEP 2: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/classA, lib1/interface, main/test STEP 3: libs: lib1, main - dirty js: main -STEP 4..5: + dirty js modules: main + dirty js files: main/test +STEP 4: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/classA, lib1/interface, main/test +STEP 5: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/interface, main/test diff --git a/js/js.translator/testData/incremental/invalidation/removeFile/project.info b/js/js.translator/testData/incremental/invalidation/removeFile/project.info index 1e8777de442..925d5a09a4b 100644 --- a/js/js.translator/testData/incremental/invalidation/removeFile/project.info +++ b/js/js.translator/testData/incremental/invalidation/removeFile/project.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1_0, lib1/l1_1, lib2/l2_0, lib2/l2_1, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: main/m diff --git a/js/js.translator/testData/incremental/invalidation/removeModule/project.info b/js/js.translator/testData/incremental/invalidation/removeModule/project.info index f1968258cbd..7c48c587942 100644 --- a/js/js.translator/testData/incremental/invalidation/removeModule/project.info +++ b/js/js.translator/testData/incremental/invalidation/removeModule/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 diff --git a/js/js.translator/testData/incremental/invalidation/removeUnusedFile/project.info b/js/js.translator/testData/incremental/invalidation/removeUnusedFile/project.info index cc9512033df..48fa4f78fdc 100644 --- a/js/js.translator/testData/incremental/invalidation/removeUnusedFile/project.info +++ b/js/js.translator/testData/incremental/invalidation/removeUnusedFile/project.info @@ -2,9 +2,10 @@ MODULES: lib1, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1_0, lib1/l1_1, main/m, main/m.export STEP 1: libs: lib1, main - dirty js: lib1 + dirty js modules: lib1 STEP 2: libs: lib1, main diff --git a/js/js.translator/testData/incremental/invalidation/renameFile/project.info b/js/js.translator/testData/incremental/invalidation/renameFile/project.info index a506eed60e3..abc96f89a2b 100644 --- a/js/js.translator/testData/incremental/invalidation/renameFile/project.info +++ b/js/js.translator/testData/incremental/invalidation/renameFile/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..1: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1_new, main/m diff --git a/js/js.translator/testData/incremental/invalidation/renameModule/project.info b/js/js.translator/testData/incremental/invalidation/renameModule/project.info index fbb4830b4cf..04c9b5ed985 100644 --- a/js/js.translator/testData/incremental/invalidation/renameModule/project.info +++ b/js/js.translator/testData/incremental/invalidation/renameModule/project.info @@ -2,10 +2,13 @@ MODULES: lib1, lib1-new, main STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export STEP 1..2: libs: lib1-new, main - dirty js: lib1-new, main + dirty js modules: lib1-new, main + dirty js files: lib1-new/l1, main/m STEP 3..5: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/simple/project.info b/js/js.translator/testData/incremental/invalidation/simple/project.info index 3a84c058f4e..34881b09aa9 100644 --- a/js/js.translator/testData/incremental/invalidation/simple/project.info +++ b/js/js.translator/testData/incremental/invalidation/simple/project.info @@ -2,7 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info b/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info index e6e487ff080..8a774ab7764 100644 --- a/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info +++ b/js/js.translator/testData/incremental/invalidation/splitJoinModule/project.info @@ -2,16 +2,21 @@ MODULES: lib1, lib1-a, lib1-b, lib1-c, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib2/l2, main/m, main/m.export STEP 1: libs: lib1-a, lib1-b, lib1-c, lib2, main - dirty js: lib1-a, lib1-b, lib1-c, lib2 + dirty js modules: lib1-a, lib1-b, lib1-c, lib2 + dirty js files: lib1-a/l1a, lib1-b/l1b, lib1-c/l1c, lib2/l2 STEP 2..3: libs: lib1-a, lib1-b, lib1-c, lib2, main - dirty js: lib1-b, lib2 + dirty js modules: lib1-b, lib2 + dirty js files: lib1-b/l1b, lib2/l2 STEP 4: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 5: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 diff --git a/js/js.translator/testData/incremental/invalidation/suspendFunctions/project.info b/js/js.translator/testData/incremental/invalidation/suspendFunctions/project.info index 912abf292a5..15348e6f334 100644 --- a/js/js.translator/testData/incremental/invalidation/suspendFunctions/project.info +++ b/js/js.translator/testData/incremental/invalidation/suspendFunctions/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info index e0c29a65aaa..9232668e447 100644 --- a/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info +++ b/js/js.translator/testData/incremental/invalidation/suspendInterfaceWithDefaultParams/project.info @@ -2,8 +2,9 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1A, lib1/l1I, lib2/l2A, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1 - + dirty js modules: lib1 + dirty js files: lib1/l1I diff --git a/js/js.translator/testData/incremental/invalidation/toplevelProperties/project.info b/js/js.translator/testData/incremental/invalidation/toplevelProperties/project.info index 712a8395c2c..a69d7878526 100644 --- a/js/js.translator/testData/incremental/invalidation/toplevelProperties/project.info +++ b/js/js.translator/testData/incremental/invalidation/toplevelProperties/project.info @@ -2,28 +2,65 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal STEP 3: libs: lib1, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 4..6: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2inlineGlobalVal STEP 7: libs: lib1, lib2, main - dirty js: lib1 -STEP 8..12: + dirty js modules: lib1 + dirty js files: lib1/l1 +STEP 8..9: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVar +STEP 10: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2inlineGlobalVal +STEP 11..12: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2inlineGlobalVar STEP 13: libs: lib1, lib2, main - dirty js: lib1 -STEP 14..21: + dirty js modules: lib1 + dirty js files: lib1/l1 +STEP 14..15: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2inlineGlobalVar +STEP 16..17: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2inlineExtensionProperty +STEP 18: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, lib2/l2globalVar, lib2/l2inlineGlobalVal, lib2/l2inlineGlobalVar, lib2/l2inlineExtensionProperty +STEP 19: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, lib2/l2inlineGlobalVar, lib2/l2inlineExtensionProperty +STEP 20: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, lib2/l2inlineGlobalVal, lib2/l2inlineGlobalVar +STEP 21: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, lib2/l2globalVar, lib2/l2inlineGlobalVar, lib2/l2inlineExtensionProperty diff --git a/js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/project.info b/js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/project.info index 1e8777de442..92d45af0fb7 100644 --- a/js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidation/transitiveInlineFunction/project.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, main -STEP 0..1: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.0.4.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.0.4.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.0.4.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.0.4.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.d.ts new file mode 100644 index 00000000000..b6c77443847 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.d.ts @@ -0,0 +1,2 @@ +type Nullable = T | null | undefined +export declare function foo(): number; \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.1.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.1.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.1.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.d.ts new file mode 100644 index 00000000000..0176267fc87 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.d.ts @@ -0,0 +1,2 @@ +type Nullable = T | null | undefined +export declare function bar(): number; \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/l1.2.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/l1.2.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/module.info new file mode 100644 index 00000000000..9a385329203 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib1/module.info @@ -0,0 +1,20 @@ +STEP 0: + modifications: + U : l1.0.4.kt -> l1.kt + added file: l1.kt +STEP 1: + modifications: + U : l1.1.kt -> l1.kt + modified ir: l1.kt + expected dts: l1.1.d.ts +STEP 2: + modifications: + U : l1.2.kt -> l1.kt + modified ir: l1.kt + expected dts: l1.2.d.ts +STEP 3: +STEP 4: + modifications: + U : l1.0.4.kt -> l1.kt + modified ir: l1.kt +STEP 5..6: diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.0.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.0.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.0.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.0.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.d.ts new file mode 100644 index 00000000000..eae218475d6 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.d.ts @@ -0,0 +1,6 @@ +type Nullable = T | null | undefined +export declare class MyClass { + constructor(stepId: number); + get stepId(): number; + qux(): number; +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.3.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.3.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.3.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.d.ts new file mode 100644 index 00000000000..e346f129ea3 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.d.ts @@ -0,0 +1,6 @@ +type Nullable = T | null | undefined +export declare class MyClass { + constructor(stepId: number); + get stepId(): number; + baz(): number; +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.5.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.5.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.5.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.d.ts new file mode 100644 index 00000000000..bb6694b6e52 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.d.ts @@ -0,0 +1,6 @@ +type Nullable = T | null | undefined +export declare class MyClass { + constructor(stepId: number); + get stepId(): number; + bar(): number; +} \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.6.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/l2.6.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/l2.6.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/module.info new file mode 100644 index 00000000000..78b1950eb7d --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/lib2/module.info @@ -0,0 +1,30 @@ +STEP 0: + dependencies: lib1 + modifications: + U : l2.0.kt -> l2.kt + added file: l2.kt +STEP 1..2: + dependencies: lib1 + updated imports: l2.kt +STEP 3: + dependencies: lib1 + modifications: + U : l2.3.kt -> l2.kt + modified ir: l2.kt + expected dts: l2.3.d.ts +STEP 4: + dependencies: lib1 + updated imports: l2.kt + expected dts: l2.3.d.ts +STEP 5: + dependencies: lib1 + modifications: + U : l2.5.kt -> l2.kt + modified ir: l2.kt + expected dts: l2.5.d.ts +STEP 6: + dependencies: lib1 + modifications: + U : l2.6.kt -> l2.kt + modified ir: l2.kt + expected dts: l2.6.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.0.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/m.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.0.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/m.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/m.kt similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.kt rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/m.kt diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/module.info new file mode 100644 index 00000000000..83cf4780f4f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/main/module.info @@ -0,0 +1,25 @@ +STEP 0: + dependencies: lib1, lib2 + added file: m.kt + expected dts: m.d.ts +STEP 1: + dependencies: lib1, lib2 + expected dts: m.d.ts +STEP 2: + dependencies: lib1, lib2 + expected dts: m.d.ts +STEP 3: + dependencies: lib1, lib2 + updated imports: m.kt + expected dts: m.d.ts +STEP 4: + dependencies: lib1, lib2 + expected dts: m.d.ts +STEP 5: + dependencies: lib1, lib2 + updated imports: m.kt + expected dts: m.d.ts +STEP 6: + dependencies: lib1, lib2 + updated imports: m.kt + expected dts: m.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/project.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/project.info new file mode 100644 index 00000000000..76c87fda9cd --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerFile/project.info @@ -0,0 +1,22 @@ +IGNORE_PER_MODULE: true + +MODULES: lib1, lib2, main + +STEP 0: + libs: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js files: lib1/l1, lib1/l1.export, lib2/l2 +STEP 2: + libs: lib1, lib2, main + dirty js files: lib1/l1, lib1/l1.export, lib2/l2 +STEP 3: + libs: lib1, lib2, main + dirty js files: lib2/l2, lib2/l2.export, main/m +STEP 4: + libs: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2 +STEP 5..6: + libs: lib1, lib2, main + dirty js files: lib2/l2, lib2/l2.export, main/m diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.0.4.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.0.4.kt new file mode 100644 index 00000000000..22669f4d07c --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.0.4.kt @@ -0,0 +1 @@ +fun foo() = 0 diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.1.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.1.kt new file mode 100644 index 00000000000..d9f8e9646dc --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.1.kt @@ -0,0 +1,2 @@ +@JsExport +fun foo() = 0 diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.2.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.2.kt new file mode 100644 index 00000000000..e629239f5b4 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/l1.2.kt @@ -0,0 +1,3 @@ +@JsExport +@JsName("bar") +fun foo() = 0 diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/module.info similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib1/module.info rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib1/module.info diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.0.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.0.kt new file mode 100644 index 00000000000..096de5121c5 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.0.kt @@ -0,0 +1,4 @@ +class MyClass(val stepId: Int) { + fun qux() = foo() + stepId +} + diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.3.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.3.kt new file mode 100644 index 00000000000..bbc9aefc15f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.3.kt @@ -0,0 +1,5 @@ +@JsExport +class MyClass(val stepId: Int) { + fun qux() = foo() + stepId +} + diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.5.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.5.kt new file mode 100644 index 00000000000..b232c5ef707 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.5.kt @@ -0,0 +1,6 @@ +@JsExport +class MyClass(val stepId: Int) { + @JsName("baz") + fun qux() = foo() + stepId +} + diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.6.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.6.kt new file mode 100644 index 00000000000..2ef203d6e6f --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/l2.6.kt @@ -0,0 +1,6 @@ +@JsExport +class MyClass(val stepId: Int) { + @JsName("bar") + fun qux() = foo() + stepId +} + diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/module.info similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/lib2/module.info rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/lib2/module.info diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.0.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.0.d.ts new file mode 100644 index 00000000000..45a34edce51 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.0.d.ts @@ -0,0 +1,2 @@ +type Nullable = T | null | undefined +export declare function box(stepId: number): string; \ No newline at end of file diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.1.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.1.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.1.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.1.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.2.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.2.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.2.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.2.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.3.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.3.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.3.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.4.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.4.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.4.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.4.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.5.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.5.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.5.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.5.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.6.d.ts b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.6.d.ts similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/m.6.d.ts rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.6.d.ts diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.kt b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.kt new file mode 100644 index 00000000000..5d81ce191d6 --- /dev/null +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/m.kt @@ -0,0 +1,7 @@ +fun box(stepId: Int): String { + val x = MyClass(stepId).qux() + if (x != stepId) { + return "Fail: $x != $stepId" + } + return "OK" +} diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/main/module.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/module.info similarity index 100% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/main/module.info rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/main/module.info diff --git a/js/js.translator/testData/incremental/invalidation/typeScriptExports/project.info b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/project.info similarity index 51% rename from js/js.translator/testData/incremental/invalidation/typeScriptExports/project.info rename to js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/project.info index 1355b89bf22..bc3947c6b69 100644 --- a/js/js.translator/testData/incremental/invalidation/typeScriptExports/project.info +++ b/js/js.translator/testData/incremental/invalidation/typeScriptExportsPerModule/project.info @@ -1,20 +1,22 @@ +IGNORE_PER_FILE: true + MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main STEP 1: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 STEP 3: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main STEP 4: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 STEP 5..6: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main diff --git a/js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/project.info b/js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/project.info index 95742c6dfbd..24168ea7e72 100644 --- a/js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/project.info +++ b/js/js.translator/testData/incremental/invalidation/unicodeSerializationAndDeserialization/project.info @@ -2,10 +2,13 @@ MODULES: lib1, lib3, lib2, main STEP 0: libs: lib1, lib3, lib2, main - dirty js: lib1, lib2, lib3, main + dirty js modules: lib1, lib2, lib3, main + dirty js files: lib1/l1, lib2/l2, lib3/l3, main/m, main/m.export STEP 1: libs: lib1, lib3, lib2, main - dirty js: lib1 + dirty js modules: lib1 + dirty js files: lib1/l1 STEP 2: libs: lib1, lib3, lib2, main - dirty js: lib3 + dirty js modules: lib3 + dirty js files: lib3/l3 diff --git a/js/js.translator/testData/incremental/invalidation/updateExports/project.info b/js/js.translator/testData/incremental/invalidation/updateExports/project.info index 80b38ddc8ce..438e7bad534 100644 --- a/js/js.translator/testData/incremental/invalidation/updateExports/project.info +++ b/js/js.translator/testData/incremental/invalidation/updateExports/project.info @@ -2,28 +2,41 @@ MODULES: lib1, lib2, main STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib1/l1d, lib2/l2a, main/m, main/m.export STEP 1: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2a, lib2/l2b, main/m STEP 2: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1c, lib2/l2a STEP 3: libs: lib1, lib2, main - dirty js: lib2 + dirty js modules: lib2 + dirty js files: lib2/l2a, lib2/l2b STEP 4: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1b, lib2/l2b STEP 5: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1d, lib1/l1c, lib2/l2b, main/m STEP 6: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1b, lib1/l1c, lib2/l2b STEP 7: libs: lib1, lib2, main - dirty js: lib1, lib2, main -STEP 8..9: + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib1/l1d, lib2/l2a, main/m +STEP 8: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1c, lib2/l2a, lib2/l2b, main/m +STEP 9: + libs: lib1, lib2, main + dirty js modules: lib1, lib2 + dirty js files: lib1/l1b, lib2/l2a, lib2/l2b diff --git a/js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/project.info b/js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/project.info index 7c67888bdcd..4d0ca29cc7b 100644 --- a/js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/project.info +++ b/js/js.translator/testData/incremental/invalidation/updateExportsAndInlineImports/project.info @@ -1,11 +1,34 @@ MODULES: lib1, lib2, main -STEP 0..3: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib2/l2a, main/m, main/m.export +STEP 1: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1c, lib2/l2a, lib2/l2b, main/m +STEP 2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib2/l2a, lib2/l2b, main/m +STEP 3: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1c, lib2/l2b, main/m STEP 4: libs: lib1, lib2, main - dirty js: lib1 -STEP 5..8: + dirty js modules: lib1 + dirty js files: lib1/l1c +STEP 5: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1b, lib2/l2b, main/m +STEP 6: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib2/l2b, main/m +STEP 7..8: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib2/l2a, lib2/l2b, main/m diff --git a/js/js.translator/testData/incremental/invalidation/variance/project.info b/js/js.translator/testData/incremental/invalidation/variance/project.info index 912abf292a5..15348e6f334 100644 --- a/js/js.translator/testData/incremental/invalidation/variance/project.info +++ b/js/js.translator/testData/incremental/invalidation/variance/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/m diff --git a/js/js.translator/testData/incremental/invalidationWithPL/changeFunctionSignature/project.info b/js/js.translator/testData/incremental/invalidationWithPL/changeFunctionSignature/project.info index 15124fafd0d..a9a7f966121 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/changeFunctionSignature/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/changeFunctionSignature/project.info @@ -1,20 +1,30 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test STEP 3: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/test STEP 4: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test STEP 5: libs: lib1, main - dirty js: main + dirty js modules: main + dirty js files: main/test STEP 6: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test STEP 7: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/interfaceBecomeClass/project.info b/js/js.translator/testData/incremental/invalidationWithPL/interfaceBecomeClass/project.info index f23a169a0c5..d99cd13769e 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/interfaceBecomeClass/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/interfaceBecomeClass/project.info @@ -1,17 +1,26 @@ MODULES: lib1, lib2, main -STEP 0..2: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/klass, main/test, main/m, main/m.export +STEP 1..2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/klass, main/test STEP 3: libs: lib1, lib2, main - dirty js: lib1, lib2 + dirty js modules: lib1, lib2 + dirty js files: lib1/l1, lib2/l2 STEP 4: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/l2, main/klass, main/test STEP 5..6: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/klass, main/test STEP 7: libs: lib1, lib2, main - dirty js: lib2, main + dirty js modules: lib2, main + dirty js files: lib2/l2, main/klass diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeFunction/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeFunction/project.info index 912abf292a5..37fdd8ef827 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeFunction/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeFunction/project.info @@ -1,5 +1,10 @@ MODULES: lib1, main -STEP 0..2: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromBlock/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromBlock/project.info index c8d9369c64b..1855ee6c037 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromBlock/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromBlock/project.info @@ -1,5 +1,14 @@ MODULES: lib1, main -STEP 0..3: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, main/test, main/m, main/m.export +STEP 1..2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1c, main/test +STEP 3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1b, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromChainCall/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromChainCall/project.info index 8ae59518ca8..efa0cdcbc1e 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromChainCall/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromChainCall/project.info @@ -1,5 +1,22 @@ MODULES: lib1, main -STEP 0..4: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/klass, main/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/klass, main/test +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/klass, main/test +STEP 3: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/klass, main/test +STEP 4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/klass, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromElvis/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromElvis/project.info index 8ae59518ca8..1357a5881d0 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromElvis/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromElvis/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..4: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, main/test +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1b, main/test +STEP 3..4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromInline/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromInline/project.info index 31bf237a5e9..4e6f7bac037 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromInline/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeFunctionFromInline/project.info @@ -1,5 +1,10 @@ MODULES: lib1, lib2, main -STEP 0..2: +STEP 0: libs: lib1, lib2, main - dirty js: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/test, main/m, main/m.export +STEP 1..2: + libs: lib1, lib2, main + dirty js modules: lib1, lib2, main + dirty js files: lib1/l1, lib2/l2, main/test diff --git a/js/js.translator/testData/incremental/invalidationWithPL/removeInlineFunction/project.info b/js/js.translator/testData/incremental/invalidationWithPL/removeInlineFunction/project.info index 8ae59518ca8..8fbee6d46be 100644 --- a/js/js.translator/testData/incremental/invalidationWithPL/removeInlineFunction/project.info +++ b/js/js.translator/testData/incremental/invalidationWithPL/removeInlineFunction/project.info @@ -1,5 +1,18 @@ MODULES: lib1, main -STEP 0..4: +STEP 0: libs: lib1, main - dirty js: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, lib1/l1b, main/test, main/m, main/m.export +STEP 1: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1b, main/test +STEP 2: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1a, main/test +STEP 3..4: + libs: lib1, main + dirty js modules: lib1, main + dirty js files: lib1/l1b, main/test diff --git a/libraries/stdlib/js-ir-minimal-for-test/build.gradle.kts b/libraries/stdlib/js-ir-minimal-for-test/build.gradle.kts index d8ca67428f2..f0991717b23 100644 --- a/libraries/stdlib/js-ir-minimal-for-test/build.gradle.kts +++ b/libraries/stdlib/js-ir-minimal-for-test/build.gradle.kts @@ -84,7 +84,7 @@ val jsMainSources by task { "libraries/stdlib/js/src/kotlin/console.kt", "libraries/stdlib/js/src/kotlin/coreDeprecated.kt", "libraries/stdlib/js/src/kotlin/date.kt", - "libraries/stdlib/js/src/kotlin/grouping.kt", + "libraries/stdlib/js/src/kotlin/GroupingJs.kt", "libraries/stdlib/js/src/kotlin/ItemArrayLike.kt", "libraries/stdlib/js/src/kotlin/io/**", "libraries/stdlib/js/src/kotlin/json.kt", diff --git a/libraries/stdlib/js/src/kotlin/Comparator.kt b/libraries/stdlib/js/src/kotlin/Comparator.kt index 01213f46a64..f6c7e5d2cc2 100644 --- a/libraries/stdlib/js/src/kotlin/Comparator.kt +++ b/libraries/stdlib/js/src/kotlin/Comparator.kt @@ -2,7 +2,7 @@ * Copyright 2010-2020 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. */ - +@file:JsName("ComparatorJs") package kotlin diff --git a/libraries/stdlib/js/src/kotlin/grouping.kt b/libraries/stdlib/js/src/kotlin/GroupingJs.kt similarity index 99% rename from libraries/stdlib/js/src/kotlin/grouping.kt rename to libraries/stdlib/js/src/kotlin/GroupingJs.kt index abec53072bc..8c1a5eca335 100644 --- a/libraries/stdlib/js/src/kotlin/grouping.kt +++ b/libraries/stdlib/js/src/kotlin/GroupingJs.kt @@ -2,6 +2,7 @@ * Copyright 2010-2018 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 kotlin.collections /** diff --git a/libraries/stdlib/js/src/kotlin/numbers.kt b/libraries/stdlib/js/src/kotlin/NumbersJs.kt similarity index 100% rename from libraries/stdlib/js/src/kotlin/numbers.kt rename to libraries/stdlib/js/src/kotlin/NumbersJs.kt diff --git a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableCollection.kt b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableCollection.kt index 35c601cb17e..3578aea0e98 100644 --- a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableCollection.kt +++ b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableCollection.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +@file:JsName("AbstractMutableCollectionJs") + package kotlin.collections /** diff --git a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt index dfbbca8fd17..8edf411dd0e 100644 --- a/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt +++ b/libraries/stdlib/js/src/kotlin/collections/AbstractMutableList.kt @@ -8,6 +8,7 @@ * Copyright 2007 Google Inc. */ +@file:JsName("AbstractMutableListJs") package kotlin.collections diff --git a/libraries/stdlib/js/src/kotlin/collections/ArrayList.kt b/libraries/stdlib/js/src/kotlin/collections/ArrayList.kt index 171fc2589db..3a4e0979208 100644 --- a/libraries/stdlib/js/src/kotlin/collections/ArrayList.kt +++ b/libraries/stdlib/js/src/kotlin/collections/ArrayList.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +@file:JsName("ArrayListJs") + package kotlin.collections /** diff --git a/libraries/stdlib/js/src/kotlin/reflect/KCallable.kt b/libraries/stdlib/js/src/kotlin/reflect/KCallable.kt index 6be7ccc4c18..ab46412fc9c 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/KCallable.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/KCallable.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +@file:JsName("KCallableJs") + package kotlin.reflect /** diff --git a/libraries/stdlib/js/src/kotlin/reflect/KClass.kt b/libraries/stdlib/js/src/kotlin/reflect/KClass.kt index 65d67dfc5f0..4b3902826a2 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/KClass.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/KClass.kt @@ -3,6 +3,8 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ +@file:kotlin.js.JsName("KClassJs") + package kotlin.reflect /** diff --git a/libraries/stdlib/js/src/kotlin/reflect/KProperty.kt b/libraries/stdlib/js/src/kotlin/reflect/KProperty.kt index 3a40904f9ca..644877b002f 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/KProperty.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/KProperty.kt @@ -4,6 +4,8 @@ */ @file:Suppress("IMPLEMENTING_FUNCTION_INTERFACE") +@file:JsName("KPropertyJs") + package kotlin.reflect /** diff --git a/libraries/stdlib/js/src/kotlin/time/DurationUnit.kt b/libraries/stdlib/js/src/kotlin/time/DurationUnitJs.kt similarity index 100% rename from libraries/stdlib/js/src/kotlin/time/DurationUnit.kt rename to libraries/stdlib/js/src/kotlin/time/DurationUnitJs.kt