[K/JS] Reexport exported declarations in a proxy module file with per-file compilation

This commit is contained in:
Artem Kobzar
2023-08-01 09:42:33 +00:00
committed by Space Team
parent 5ccc302e01
commit 12715c062d
107 changed files with 341 additions and 169 deletions
@@ -6,10 +6,10 @@
package org.jetbrains.kotlin.ir.backend.js.ic package org.jetbrains.kotlin.ir.backend.js.ic
import org.jetbrains.kotlin.backend.common.serialization.cityHash64 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.ir.backend.js.transformers.irToJs.*
import org.jetbrains.kotlin.protobuf.CodedInputStream import org.jetbrains.kotlin.protobuf.CodedInputStream
import org.jetbrains.kotlin.protobuf.CodedOutputStream import org.jetbrains.kotlin.protobuf.CodedOutputStream
import org.jetbrains.kotlin.utils.addToStdlib.butIf
import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runIf
import java.io.File import java.io.File
@@ -22,38 +22,50 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
private const val CACHED_FILE_D_TS = "file.d.ts" private const val CACHED_FILE_D_TS = "file.d.ts"
} }
class CachedFileInfo( sealed class CachedFileInfo(val moduleArtifact: ModuleArtifact, moduleHeader: JsIrModuleHeader?) : CacheInfo {
val moduleArtifact: ModuleArtifact,
val fileArtifact: SrcFileArtifact,
val isExportFileCachedInfo: Boolean = false,
) : CacheInfo {
var dtsHash: Long? = null
var crossFileReferencesHash: ICHash = ICHash() var crossFileReferencesHash: ICHash = ICHash()
var exportFileCachedInfo: CachedFileInfo? = null final override lateinit var jsIrHeader: JsIrModuleHeader
override lateinit var jsIrHeader: JsIrModuleHeader
constructor( init {
jsIrModuleHeader: JsIrModuleHeader, if (moduleHeader != null) jsIrHeader = moduleHeader
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) } sealed class SerializableCachedFileInfo(
val dtsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { runIf(isExportFileCachedInfo) { getArtifactWithName(CACHED_FILE_D_TS) } } moduleArtifact: ModuleArtifact,
val sourceMapFileArtifact by lazy(LazyThreadSafetyMode.NONE) { runIf(!isExportFileCachedInfo) { getArtifactWithName(CACHED_FILE_JS_MAP) } } val fileArtifact: SrcFileArtifact,
moduleHeader: JsIrModuleHeader?
) : CachedFileInfo(moduleArtifact, moduleHeader) {
fun getArtifactWithName(name: String): File? = moduleArtifact.artifactsDir?.let { File(it, "$filePrefix.$name") }
private val filePrefix by lazy(LazyThreadSafetyMode.NONE) { fileArtifact.srcFilePath.run { "${substringAfterLast('/')}.${cityHash64()}" } }
}
private fun getArtifactWithName(name: String): File? = moduleArtifact.artifactsDir?.let { File(it, "$filePrefix.$name") } class MainFileCachedInfo(moduleArtifact: ModuleArtifact, fileArtifact: SrcFileArtifact, moduleHeader: JsIrModuleHeader? = null) :
SerializableCachedFileInfo(moduleArtifact, fileArtifact, moduleHeader) {
var exportFileCachedInfo: ExportFileCachedInfo? = null
private val filePrefix by lazy(LazyThreadSafetyMode.NONE) { val jsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_FILE_JS) }
val pathHash = fileArtifact.srcFilePath.cityHash64String() val moduleHeaderArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(JS_MODULE_HEADER) }
"${fileArtifact.srcFilePath.substringAfterLast('/')}.$pathHash" val sourceMapFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_FILE_JS_MAP) }
}
class ExportFileCachedInfo(
moduleArtifact: ModuleArtifact,
fileArtifact: SrcFileArtifact,
moduleHeader: JsIrModuleHeader? = null,
var tsDeclarationsHash: Long? = null
) : SerializableCachedFileInfo(moduleArtifact, fileArtifact, moduleHeader) {
val jsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_EXPORT_FILE_JS) }
val dtsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_FILE_D_TS) }
}
class ModuleProxyFileCachedInfo(moduleArtifact: ModuleArtifact, moduleHeader: JsIrModuleHeader? = null) :
CachedFileInfo(moduleArtifact, moduleHeader) {
val jsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_FILE_JS) }
val dtsFileArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(CACHED_FILE_D_TS) }
val moduleHeaderArtifact by lazy(LazyThreadSafetyMode.NONE) { getArtifactWithName(JS_MODULE_HEADER) }
private fun getArtifactWithName(name: String): File? = moduleArtifact.artifactsDir?.let { File(it, "entry.$name") }
} }
} }
@@ -66,13 +78,14 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
private fun JsIrProgramFragment.getExportFragmentExternalName(moduleArtifact: ModuleArtifact) = private fun JsIrProgramFragment.getExportFragmentExternalName(moduleArtifact: ModuleArtifact) =
moduleFragmentToExternalName.getExternalNameForExporterFile(name, packageFqn, moduleArtifact.moduleExternalName) moduleFragmentToExternalName.getExternalNameForExporterFile(name, packageFqn, moduleArtifact.moduleExternalName)
private fun JsIrProgramFragment.asIrModuleHeader(moduleName: String): JsIrModuleHeader { private fun JsIrProgramFragment.asIrModuleHeader(moduleName: String, reexportedIn: String? = null): JsIrModuleHeader {
return JsIrModuleHeader( return JsIrModuleHeader(
moduleName = moduleName, moduleName = moduleName,
externalModuleName = moduleName, externalModuleName = moduleName,
definitions = definitions, definitions = definitions,
nameBindings = nameBindings.mapValues { v -> v.value.toString() }, nameBindings = nameBindings.mapValues { v -> v.value.toString() },
optionalCrossModuleImports = optionalCrossModuleImports, optionalCrossModuleImports = optionalCrossModuleImports,
reexportedInModuleWithName = reexportedIn,
associatedModule = null associatedModule = null
) )
} }
@@ -80,15 +93,20 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
private fun SrcFileArtifact.loadJsIrModuleHeaders(moduleArtifact: ModuleArtifact) = with(loadJsIrFragments()) { private fun SrcFileArtifact.loadJsIrModuleHeaders(moduleArtifact: ModuleArtifact) = with(loadJsIrFragments()) {
LoadedJsIrModuleHeaders( LoadedJsIrModuleHeaders(
mainFragment.run { asIrModuleHeader(getMainFragmentExternalName(moduleArtifact)) }, mainFragment.run { asIrModuleHeader(getMainFragmentExternalName(moduleArtifact)) },
exportFragment?.run { asIrModuleHeader(mainFragment.getExportFragmentExternalName(moduleArtifact)) }, exportFragment?.run { asIrModuleHeader(mainFragment.getExportFragmentExternalName(moduleArtifact), moduleArtifact.moduleExternalName) },
) )
} }
private fun CodedInputStream.loadSingleCachedFileInfo(cachedFileInfo: CachedFileInfo) = cachedFileInfo.also { private fun <T : CachedFileInfo> CodedInputStream.loadSingleCachedFileInfo(cachedFileInfo: T): T = cachedFileInfo.also {
val moduleName = readString() val moduleName = readString()
var reexportedIn: String? = null
it.crossFileReferencesHash = ICHash.fromProtoStream(this) it.crossFileReferencesHash = ICHash.fromProtoStream(this)
it.dtsHash = runIf(readBool()) { readInt64() }
if (it is CachedFileInfo.ExportFileCachedInfo) {
it.tsDeclarationsHash = runIf(readBool()) { readInt64() }
reexportedIn = cachedFileInfo.moduleArtifact.moduleExternalName
}
val (definitions, nameBindings, optionalCrossModuleImports) = fetchJsIrModuleHeaderNames() val (definitions, nameBindings, optionalCrossModuleImports) = fetchJsIrModuleHeaderNames()
@@ -98,15 +116,16 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
definitions = definitions, definitions = definitions,
nameBindings = nameBindings, nameBindings = nameBindings,
optionalCrossModuleImports = optionalCrossModuleImports, optionalCrossModuleImports = optionalCrossModuleImports,
associatedModule = null reexportedInModuleWithName = reexportedIn,
associatedModule = null,
) )
} }
private fun <T> CachedFileInfo.readModuleHeaderCache(f: CodedInputStream.() -> T): T? = moduleHeaderArtifact?.useCodedInputIfExists(f) private fun <T> CachedFileInfo.MainFileCachedInfo.readModuleHeaderCache(f: CodedInputStream.() -> T): T? =
moduleHeaderArtifact?.useCodedInputIfExists(f)
private fun ModuleArtifact.fetchFileInfoFor(fileArtifact: SrcFileArtifact): List<CachedFileInfo>? { private fun ModuleArtifact.fetchFileInfoFor(fileArtifact: SrcFileArtifact): List<CachedFileInfo>? {
val moduleArtifact = this val mainFileCachedFileInfo = CachedFileInfo.MainFileCachedInfo(this, fileArtifact)
val mainFileCachedFileInfo = CachedFileInfo(moduleArtifact, fileArtifact)
return mainFileCachedFileInfo.readModuleHeaderCache { return mainFileCachedFileInfo.readModuleHeaderCache {
mainFileCachedFileInfo.run { mainFileCachedFileInfo.run {
@@ -117,48 +136,66 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
} }
} }
private fun CodedInputStream.fetchFileInfoForExportedPart(mainCachedFileInfo: CachedFileInfo): CachedFileInfo? { private fun ModuleArtifact.fetchModuleProxyFileInfo(): CachedFileInfo.ModuleProxyFileCachedInfo? {
val mainFileCachedFileInfo = CachedFileInfo.ModuleProxyFileCachedInfo(this)
return mainFileCachedFileInfo.moduleHeaderArtifact?.useCodedInputIfExists { loadSingleCachedFileInfo(mainFileCachedFileInfo) }
}
private fun CodedInputStream.fetchFileInfoForExportedPart(mainCachedFileInfo: CachedFileInfo.MainFileCachedInfo): CachedFileInfo.ExportFileCachedInfo? {
return ifTrue { return ifTrue {
loadSingleCachedFileInfo( loadSingleCachedFileInfo(
CachedFileInfo( CachedFileInfo.ExportFileCachedInfo(mainCachedFileInfo.moduleArtifact, mainCachedFileInfo.fileArtifact)
mainCachedFileInfo.moduleArtifact,
mainCachedFileInfo.fileArtifact,
isExportFileCachedInfo = true
)
) )
} }
} }
private fun CodedOutputStream.commitSingleFileInfo(cachedFileInfo: CachedFileInfo) { private fun CodedOutputStream.commitSingleFileInfo(cachedFileInfo: CachedFileInfo.SerializableCachedFileInfo) {
writeStringNoTag(cachedFileInfo.jsIrHeader.externalModuleName) writeStringNoTag(cachedFileInfo.jsIrHeader.externalModuleName)
cachedFileInfo.crossFileReferencesHash.toProtoStream(this) cachedFileInfo.crossFileReferencesHash.toProtoStream(this)
ifNotNull(cachedFileInfo.dtsHash, ::writeInt64NoTag) if (cachedFileInfo is CachedFileInfo.ExportFileCachedInfo) {
ifNotNull(cachedFileInfo.tsDeclarationsHash, ::writeInt64NoTag)
}
commitJsIrModuleHeaderNames(cachedFileInfo.jsIrHeader) commitJsIrModuleHeaderNames(cachedFileInfo.jsIrHeader)
} }
private fun CachedFileInfo.commitFileInfo() = runIf(!isExportFileCachedInfo) { private fun CachedFileInfo.commitFileInfo() = when (this) {
moduleHeaderArtifact?.useCodedOutput { is CachedFileInfo.MainFileCachedInfo -> {
ifNotNull(exportFileCachedInfo) { commitSingleFileInfo(it) } moduleHeaderArtifact?.useCodedOutput {
commitSingleFileInfo(this@commitFileInfo) ifNotNull(exportFileCachedInfo) { commitSingleFileInfo(it) }
commitSingleFileInfo(this@commitFileInfo)
}
} }
is CachedFileInfo.ModuleProxyFileCachedInfo -> {
moduleHeaderArtifact?.useCodedOutput {
writeStringNoTag(jsIrHeader.externalModuleName)
crossFileReferencesHash.toProtoStream(this)
commitJsIrModuleHeaderNames(jsIrHeader)
}
}
is CachedFileInfo.ExportFileCachedInfo -> {}
}
private fun ModuleArtifact.generateModuleProxyFileCachedInfo(): CachedFileInfo {
return CachedFileInfo.ModuleProxyFileCachedInfo(
this,
generateProxyIrModuleWith(moduleExternalName, moduleExternalName).makeModuleHeader()
)
} }
private fun ModuleArtifact.loadFileInfoFor(fileArtifact: SrcFileArtifact): List<CachedFileInfo> { private fun ModuleArtifact.loadFileInfoFor(fileArtifact: SrcFileArtifact): List<CachedFileInfo> {
val moduleArtifact = this val headers = fileArtifact.loadJsIrModuleHeaders(this)
val headers = fileArtifact.loadJsIrModuleHeaders(moduleArtifact)
val mainCachedFileInfo = CachedFileInfo(headers.mainHeader, this, fileArtifact) val mainCachedFileInfo = CachedFileInfo.MainFileCachedInfo(this, fileArtifact, headers.mainHeader)
if (headers.exportHeader != null) { if (headers.exportHeader != null) {
val tsDeclarationsHash = fileArtifact.loadJsIrFragments().exportFragment?.dts?.raw?.cityHash64() val tsDeclarationsHash = fileArtifact.loadJsIrFragments().exportFragment?.dts?.raw?.cityHash64()
val cachedExportFileInfo = mainCachedFileInfo.readModuleHeaderCache { fetchFileInfoForExportedPart(mainCachedFileInfo) } val cachedExportFileInfo = mainCachedFileInfo.readModuleHeaderCache { fetchFileInfoForExportedPart(mainCachedFileInfo) }
mainCachedFileInfo.exportFileCachedInfo = if (cachedExportFileInfo?.dtsHash != tsDeclarationsHash) { mainCachedFileInfo.exportFileCachedInfo = if (cachedExportFileInfo?.tsDeclarationsHash != tsDeclarationsHash) {
CachedFileInfo( CachedFileInfo.ExportFileCachedInfo(
headers.exportHeader, this,
moduleArtifact,
fileArtifact, fileArtifact,
tsDeclarationsHash = tsDeclarationsHash, headers.exportHeader,
isExportFileCachedInfo = true tsDeclarationsHash,
) )
} else { } else {
cachedExportFileInfo cachedExportFileInfo
@@ -169,7 +206,11 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
} }
private val CachedFileInfo.cachedFiles: CachedFileArtifacts? private val CachedFileInfo.cachedFiles: CachedFileArtifacts?
get() = jsFileArtifact?.let { CachedFileArtifacts(it, sourceMapFileArtifact, dtsFileArtifact) } get() = when (this) {
is CachedFileInfo.MainFileCachedInfo -> jsFileArtifact?.let { CachedFileArtifacts(it, sourceMapFileArtifact, null) }
is CachedFileInfo.ExportFileCachedInfo -> jsFileArtifact?.let { CachedFileArtifacts(it, null, dtsFileArtifact) }
is CachedFileInfo.ModuleProxyFileCachedInfo -> jsFileArtifact?.let { CachedFileArtifacts(it, null, dtsFileArtifact) }
}
override fun getMainModuleAndDependencies(cacheInfo: List<CachedFileInfo>) = null to cacheInfo override fun getMainModuleAndDependencies(cacheInfo: List<CachedFileInfo>) = null to cacheInfo
@@ -188,23 +229,40 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
} ?: compilationOutputs } ?: compilationOutputs
override fun loadJsIrModule(cacheInfo: CachedFileInfo): JsIrModule { override fun loadJsIrModule(cacheInfo: CachedFileInfo): JsIrModule {
if (cacheInfo !is CachedFileInfo.SerializableCachedFileInfo) {
return generateProxyIrModuleWith(cacheInfo.jsIrHeader.externalModuleName, cacheInfo.jsIrHeader.externalModuleName)
}
val fragments = cacheInfo.fileArtifact.loadJsIrFragments() val fragments = cacheInfo.fileArtifact.loadJsIrFragments()
val isExportFileCachedInfo = cacheInfo is CachedFileInfo.ExportFileCachedInfo
return JsIrModule( return JsIrModule(
cacheInfo.jsIrHeader.moduleName, cacheInfo.jsIrHeader.moduleName,
cacheInfo.jsIrHeader.externalModuleName, cacheInfo.jsIrHeader.externalModuleName,
listOf(if (cacheInfo.isExportFileCachedInfo) fragments.exportFragment!! else fragments.mainFragment) listOf(if (isExportFileCachedInfo) fragments.exportFragment!! else fragments.mainFragment),
runIf(isExportFileCachedInfo) { cacheInfo.moduleArtifact.moduleSafeName }
) )
} }
override fun loadProgramHeadersFromCache(): List<CachedFileInfo> { override fun loadProgramHeadersFromCache(): List<CachedFileInfo> {
return moduleArtifacts return moduleArtifacts
.flatMap { module -> .flatMap { moduleArtifact ->
module.fileArtifacts.flatMap { var hasFileWithJsExportedDeclaration = false
if (it.isModified()) moduleArtifact.fileArtifacts
module.loadFileInfoFor(it) .flatMap { srcFileArtifact ->
else val cachedFileInfo = if (srcFileArtifact.isModified())
module.fetchFileInfoFor(it) ?: module.loadFileInfoFor(it) moduleArtifact.loadFileInfoFor(srcFileArtifact)
} else
moduleArtifact.fetchFileInfoFor(srcFileArtifact) ?: moduleArtifact.loadFileInfoFor(srcFileArtifact)
if (!hasFileWithJsExportedDeclaration && cachedFileInfo.hasExportFile()) {
hasFileWithJsExportedDeclaration = true
}
cachedFileInfo
}
.butIf(hasFileWithJsExportedDeclaration) {
it.plus(moduleArtifact.fetchModuleProxyFileInfo() ?: moduleArtifact.generateModuleProxyFileCachedInfo())
}
} }
.onEach { headerToCachedInfo[it.jsIrHeader] = it } .onEach { headerToCachedInfo[it.jsIrHeader] = it }
} }
@@ -228,4 +286,6 @@ class JsPerFileCache(private val moduleArtifacts: List<ModuleArtifact>) : JsMult
private data class CachedFileArtifacts(val jsCodeFile: File, val sourceMapFile: File?, val tsDeclarationsFile: File?) private data class CachedFileArtifacts(val jsCodeFile: File, val sourceMapFile: File?, val tsDeclarationsFile: File?)
private data class LoadedJsIrModuleHeaders(val mainHeader: JsIrModuleHeader, val exportHeader: JsIrModuleHeader?) private data class LoadedJsIrModuleHeaders(val mainHeader: JsIrModuleHeader, val exportHeader: JsIrModuleHeader?)
private fun List<JsPerFileCache.CachedFileInfo>.hasExportFile(): Boolean = size > 1
} }
@@ -47,6 +47,12 @@ val String.safeModuleName: String
val IrModuleFragment.safeName: String val IrModuleFragment.safeName: String
get() = name.asString().safeModuleName get() = name.asString().safeModuleName
fun generateProxyIrModuleWith(safeName: String, externalName: String) = JsIrModule(
safeName,
externalName,
listOf(JsIrProgramFragment(safeName, "<proxy-file>"))
)
enum class JsGenerationGranularity { enum class JsGenerationGranularity {
WHOLE_PROGRAM, WHOLE_PROGRAM,
PER_MODULE, PER_MODULE,
@@ -301,10 +307,9 @@ class IrModuleToJsTransformer(
} }
private fun IrAndExportedDeclarations.toJsIrProxyModule(): JsIrModule { private fun IrAndExportedDeclarations.toJsIrProxyModule(): JsIrModule {
return JsIrModule( return generateProxyIrModuleWith(
fragment.safeName, fragment.safeName,
moduleFragmentToNameMapper.getExternalNameFor(fragment), moduleFragmentToNameMapper.getExternalNameFor(fragment),
listOf(JsIrProgramFragment(fragment.safeName, "<proxy-file>"))
) )
} }
@@ -261,20 +261,16 @@ abstract class AbstractInvalidationTest(
} }
private fun verifyJsCode(stepId: Int, mainModuleName: String, jsFiles: List<String>) { private fun verifyJsCode(stepId: Int, mainModuleName: String, jsFiles: List<String>) {
val testModuleName = "./$mainModuleName${projectInfo.moduleKind.extension}"
try { try {
V8IrJsTestChecker.checkWithTestFunctionArgs( V8IrJsTestChecker.checkWithTestFunctionArgs(
files = jsFiles, files = jsFiles,
testModuleName = testModuleName, testModuleName = "./$mainModuleName${projectInfo.moduleKind.extension}",
testPackageName = null, testPackageName = null,
testFunctionName = BOX_FUNCTION_NAME, testFunctionName = BOX_FUNCTION_NAME,
testFunctionArgs = "$stepId", testFunctionArgs = "$stepId",
expectedResult = "OK", expectedResult = "OK",
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) { entryModulePath = jsFiles.last()
JsGenerationGranularity.PER_FILE -> jsFiles.find { it.endsWith("m.export.mjs") }
else -> jsFiles.last()
}
) )
} catch (e: ComparisonFailure) { } catch (e: ComparisonFailure) {
throw ComparisonFailure("Mismatched box out at step $stepId", e.expected, e.actual) throw ComparisonFailure("Mismatched box out at step $stepId", e.expected, e.actual)
@@ -47,7 +47,7 @@ abstract class AbstractJsIrES6InvalidationPerModuleTest : IrAbstractInvalidation
abstract class AbstractJsIrInvalidationPerFileWithPLTest : AbstractJsIrInvalidationWithPLTest( abstract class AbstractJsIrInvalidationPerFileWithPLTest : AbstractJsIrInvalidationWithPLTest(
granularity = JsGenerationGranularity.PER_FILE, granularity = JsGenerationGranularity.PER_FILE,
workingDirPath = "incrementalOut/invalidationWithPL/perModule" workingDirPath = "incrementalOut/invalidationWithPL/perFile"
) )
abstract class AbstractJsIrInvalidationPerModuleWithPLTest : AbstractJsIrInvalidationWithPLTest( abstract class AbstractJsIrInvalidationPerModuleWithPLTest : AbstractJsIrInvalidationWithPLTest(
@@ -307,6 +307,12 @@ public class JsFirInvalidationPerFileTestGenerated extends AbstractJsFirInvalida
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -307,6 +307,12 @@ public class JsFirInvalidationPerModuleTestGenerated extends AbstractJsFirInvali
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -307,6 +307,12 @@ public class JsIrES6InvalidationPerFileTestGenerated extends AbstractJsIrES6Inva
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -307,6 +307,12 @@ public class JsIrES6InvalidationPerModuleTestGenerated extends AbstractJsIrES6In
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -307,6 +307,12 @@ public class JsIrInvalidationPerFileTestGenerated extends AbstractJsIrInvalidati
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -307,6 +307,12 @@ public class JsIrInvalidationPerModuleTestGenerated extends AbstractJsIrInvalida
runTest("js/js.translator/testData/incremental/invalidation/jsExport/"); runTest("js/js.translator/testData/incremental/invalidation/jsExport/");
} }
@Test
@TestMetadata("jsExportWithMultipleFiles")
public void testJsExportWithMultipleFiles() throws Exception {
runTest("js/js.translator/testData/incremental/invalidation/jsExportWithMultipleFiles/");
}
@Test @Test
@TestMetadata("jsModuleAnnotation") @TestMetadata("jsModuleAnnotation")
public void testJsModuleAnnotation() throws Exception { public void testJsModuleAnnotation() throws Exception {
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1a, lib2/l2, main/m, main/m.export dirty js files: lib1/l1a, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export dirty js files: lib1/f, lib1/f1, lib1/f2, lib1/f3, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/testEquals, main/testToString, main/testHashCode, main/m, main/m.export dirty js files: lib1/l1, main/testEquals, main/testToString, main/testHashCode, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, lib2/l2string, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, lib2/l2string, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/f, main/m, main/m.export dirty js files: lib1/l1, main/f, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -12,7 +12,7 @@ STEP 2:
language: +EnumEntries language: +EnumEntries
libs: lib1, main libs: lib1, main
dirty js modules: main, lib1 dirty js modules: main, lib1
dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export dirty js files: lib1/l1, main/testEnumEntries, main/testEnumValues, main/m, main/m.export, main
STEP 3: STEP 3:
language: +EnumEntries language: +EnumEntries
libs: lib1, main libs: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/l2, main/m, main/m.export dirty js files: lib1/l1, lib1/l2, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m, main/m.export dirty js files: lib1/A, lib1/B, lib1/C, main/classABC, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/classA, main/m, main/m.export dirty js files: lib1/l1, main/classA, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/classA, main/m, main/m.export dirty js files: lib1/l1, main/classA, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/class2, lib2/object2, main/m, main/m.export dirty js files: lib1/l1, lib2/class2, lib2/object2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib2 dirty js modules: lib2
@@ -3,6 +3,6 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/publicClass, main/test, main/m, main/m.export dirty js files: lib1/l1, main/publicClass, main/test, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..6: STEP 1..6:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2b, lib2/l2a, main/m, main/m.export dirty js files: lib1/l1, lib2/l2b, lib2/l2a, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib2 dirty js modules: lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/A, lib1/B, lib1/C, main/test, main/m, main/m.export dirty js files: lib1/A, lib1/B, lib1/C, main/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..4: STEP 1..4:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main, libProxy
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..7: STEP 1..7:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,11 +3,11 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/l1.export, main/m dirty js files: lib1/l1, lib1/l1.export, lib1, main/m
STEP 2..3: STEP 2..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/l2, main/m, main/m.export dirty js files: lib1/l1, lib1/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..9: STEP 1..9:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export dirty js files: lib1/l1a, lib1/l1b, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib2, main dirty js modules: lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: 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 dirty js files: lib1/InterfaceA, lib1/InterfaceB, lib1/InterfaceC, lib2/MyClass, lib2/GetA, lib2/GetB, lib2/GetC, main/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: 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 dirty js files: lib1/InterfaceA, lib1/ClassB, lib2/MyClass, lib2/GetA, lib2/GetB, main/test, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/Interface, lib1/ClassA, lib1/ClassB, main/test, main/m, main/m.export dirty js files: lib1/Interface, lib1/ClassA, lib1/ClassB, main/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, lib2/l2test, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, lib2/l2test, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export dirty js files: lib1/l1, lib1/js, lib1/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,11 +3,11 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, lib1/l1.export, main/m dirty js files: lib1/l1, lib1/l1.export, lib1, main/m
STEP 2..3: STEP 2..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -0,0 +1 @@
fun foo() = 77
@@ -0,0 +1,2 @@
@JsExport
fun foo() = 77
@@ -0,0 +1 @@
fun foo() = 77
@@ -0,0 +1,2 @@
@JsExport
class Bar
@@ -0,0 +1 @@
class Bar
@@ -0,0 +1,2 @@
@JsExport
class Bar
@@ -0,0 +1 @@
fun foo() = 77
@@ -0,0 +1,29 @@
STEP 0:
modifications:
U : l1.0.kt -> l1.kt
added file: l1.kt
STEP 1:
modifications:
U : l1.1.kt -> l1.kt
modified ir: l1.kt
STEP 2:
modifications:
U : l2.2.kt -> l2.kt
added file: l2.kt
STEP 3:
modifications:
U : l2.3.kt -> l2.kt
modified ir: l2.kt
STEP 4:
modifications:
D : l1.kt
removed file: l1.kt
STEP 5:
modifications:
U : l1.5.kt -> l1.kt
added file: l1.kt
STEP 6:
modifications:
U : l1.6.kt -> l1.kt
U : l2.6.kt -> l2.kt
modified ir: l1.kt, l2.kt
@@ -0,0 +1,3 @@
fun box(): String {
return "OK"
}
@@ -0,0 +1,3 @@
STEP 0:
added file: m.kt
STEP 1..6:
@@ -0,0 +1,30 @@
MODULES: lib1, main
STEP 0:
libs: lib1, main
dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l1, lib1/l1.export, lib1
STEP 2:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l2
STEP 3:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l2, lib1/l2.export, lib1
STEP 4:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1
STEP 5:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l1
STEP 6:
libs: lib1, main
dirty js modules: lib1
dirty js files: lib1/l1, lib1/l1.export, lib1/l2, lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/ObjectA, lib1/ObjectB, main/m, main/m.export dirty js files: lib1/ObjectA, lib1/ObjectB, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,22 +3,22 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
language: +TypeAliases language: +TypeAliases
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 2: STEP 2:
language: +TypeAliases, +BoundCallableReferences, +LocalDelegatedProperties, +TopLevelSealedInheritance language: +TypeAliases, +BoundCallableReferences, +LocalDelegatedProperties, +TopLevelSealedInheritance
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 3: STEP 3:
language: +TypeAliases, +BoundCallableReferences, +TopLevelSealedInheritance language: +TypeAliases, +BoundCallableReferences, +TopLevelSealedInheritance
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 4: STEP 4:
language: +BoundCallableReferences, +TopLevelSealedInheritance, +TypeAliases language: +BoundCallableReferences, +TopLevelSealedInheritance, +TypeAliases
libs: lib1, main libs: lib1, main
@@ -29,7 +29,7 @@ STEP 6:
language: +BoundCallableReferences, -TypeAliases, +TopLevelSealedInheritance language: +BoundCallableReferences, -TypeAliases, +TopLevelSealedInheritance
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 7: STEP 7:
language: +TopLevelSealedInheritance, +BoundCallableReferences, +TypeAliases language: +TopLevelSealedInheritance, +BoundCallableReferences, +TypeAliases
libs: lib1, main libs: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m0, main/m1, main/m, main/m.export dirty js files: lib1/l1, main/m0, main/m1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: main dirty js modules: main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1a, lib1/l1b, lib1/test, main/m, main/m.export dirty js files: lib1/l1a, lib1/l1b, lib1/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -4,7 +4,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB, lib2/test, main/m, main/m.export dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB, lib2/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB dirty js files: lib1/demo, lib1/JsModuleA, lib1/JsModuleB
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, lib3, main
STEP 0: STEP 0:
libs: lib1, lib2, lib3, main libs: lib1, lib2, lib3, main
dirty js modules: 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 dirty js files: lib1/l11, lib1/l12, lib2/l21, lib3/l3, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, lib3, main libs: lib1, lib2, lib3, main
dirty js modules: lib1, lib2, lib3, main dirty js modules: lib1, lib2, lib3, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, lib3, main
STEP 0: STEP 0:
libs: lib1, lib2, lib3, main libs: lib1, lib2, lib3, main
dirty js modules: 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 dirty js files: lib1/l1, lib2/l2, lib3/l3, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, lib3, main libs: lib1, lib2, lib3, main
dirty js modules: lib1, lib2, lib3, main dirty js modules: lib1, lib2, lib3, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..3: STEP 1..3:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: main
STEP 0: STEP 0:
libs: main libs: main
dirty js modules: main dirty js modules: main
dirty js files: main/f, main/m, main/m.export dirty js files: main/f, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: main libs: main
dirty js modules: main dirty js modules: main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export dirty js files: lib1/classA, lib1/interface, main/test, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: 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 dirty js files: lib1/l1_0, lib1/l1_1, lib2/l2_0, lib2/l2_1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2 dirty js modules: lib1, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1_0, lib1/l1_1, main/m, main/m.export dirty js files: lib1/l1_0, lib1/l1_1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib1-new, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1-new, main libs: lib1-new, main
dirty js modules: lib1-new, main dirty js modules: lib1-new, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib1-a, lib1-b, lib1-c, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: 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 dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1-a, lib1-b, lib1-c, lib2, main libs: lib1-a, lib1-b, lib1-c, lib2, main
dirty js modules: lib1-a, lib1-b, lib1-c, lib2 dirty js modules: lib1-a, lib1-b, lib1-c, lib2
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1A, lib1/l1I, lib2/l2A, main/m, main/m.export dirty js files: lib1/l1A, lib1/l1I, lib2/l2A, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, lib2/l2globalVal, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -4,16 +4,16 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2, main/m, main/m.export dirty js files: lib1/l1, lib2/l2, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/l1, lib1/l1.export, lib2/l2 dirty js files: lib1/l1, lib1/l1.export, lib1, lib2/l2
STEP 2: STEP 2:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/l1, lib1/l1.export, lib2/l2 dirty js files: lib1/l1, lib1/l1.export, lib2/l2
STEP 3: STEP 3:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib2/l2, lib2/l2.export, main/m dirty js files: lib2/l2, lib2/l2.export, lib2, main/m
STEP 4: STEP 4:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js files: lib1/l1, lib2/l2 dirty js files: lib1/l1, lib2/l2
@@ -3,7 +3,7 @@ MODULES: lib1, lib3, lib2, main
STEP 0: STEP 0:
libs: lib1, lib3, lib2, main libs: lib1, lib3, lib2, main
dirty js modules: 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 dirty js files: lib1/l1, lib2/l2, lib3/l3, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib3, lib2, main libs: lib1, lib3, lib2, main
dirty js modules: lib1 dirty js modules: lib1
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: 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 dirty js files: lib1/l1a, lib1/l1b, lib1/l1c, lib1/l1d, lib2/l2a, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib2 dirty js modules: lib2
@@ -3,7 +3,7 @@ MODULES: lib1, lib2, main
STEP 0: STEP 0:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
dirty js files: lib1/l1a, lib1/l1b, lib2/l2a, main/m, main/m.export dirty js files: lib1/l1a, lib1/l1b, lib2/l2a, main/m, main/m.export, main
STEP 1: STEP 1:
libs: lib1, lib2, main libs: lib1, lib2, main
dirty js modules: lib1, lib2, main dirty js modules: lib1, lib2, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/m, main/m.export dirty js files: lib1/l1, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
@@ -3,7 +3,7 @@ MODULES: lib1, main
STEP 0: STEP 0:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main
dirty js files: lib1/l1, main/test, main/m, main/m.export dirty js files: lib1/l1, main/test, main/m, main/m.export, main
STEP 1..2: STEP 1..2:
libs: lib1, main libs: lib1, main
dirty js modules: lib1, main dirty js modules: lib1, main

Some files were not shown because too many files have changed in this diff Show More