JPS tests: switch to new dependencies.txt parser
Order of modules changed because new parser preserve order, while previously modules are accidentally sorted by hashCode().
Original commit: 808e83a01e
This commit is contained in:
+67
-57
@@ -38,22 +38,25 @@ import org.jetbrains.jps.builders.logging.BuildLoggingManager
|
|||||||
import org.jetbrains.jps.cmdline.ProjectDescriptor
|
import org.jetbrains.jps.cmdline.ProjectDescriptor
|
||||||
import org.jetbrains.jps.incremental.*
|
import org.jetbrains.jps.incremental.*
|
||||||
import org.jetbrains.jps.incremental.messages.BuildMessage
|
import org.jetbrains.jps.incremental.messages.BuildMessage
|
||||||
|
import org.jetbrains.jps.model.JpsDummyElement
|
||||||
import org.jetbrains.jps.model.JpsModuleRootModificationUtil
|
import org.jetbrains.jps.model.JpsModuleRootModificationUtil
|
||||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope
|
|
||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||||
|
import org.jetbrains.jps.model.library.sdk.JpsSdk
|
||||||
import org.jetbrains.jps.util.JpsPathUtil
|
import org.jetbrains.jps.util.JpsPathUtil
|
||||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.storage.version.CacheAttributesDiff
|
import org.jetbrains.kotlin.incremental.storage.version.CacheAttributesDiff
|
||||||
import org.jetbrains.kotlin.incremental.storage.version.CacheVersionManager
|
import org.jetbrains.kotlin.incremental.storage.version.CacheVersionManager
|
||||||
import org.jetbrains.kotlin.incremental.testingUtils.*
|
import org.jetbrains.kotlin.incremental.testingUtils.*
|
||||||
|
import org.jetbrains.kotlin.jps.build.dependeciestxt.DependenciesTxtBuilder
|
||||||
|
import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt
|
||||||
import org.jetbrains.kotlin.jps.incremental.CompositeLookupsCacheAttributesManager
|
import org.jetbrains.kotlin.jps.incremental.CompositeLookupsCacheAttributesManager
|
||||||
import org.jetbrains.kotlin.jps.incremental.getKotlinCache
|
import org.jetbrains.kotlin.jps.incremental.getKotlinCache
|
||||||
import org.jetbrains.kotlin.jps.incremental.withLookupStorage
|
import org.jetbrains.kotlin.jps.incremental.withLookupStorage
|
||||||
|
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
|
||||||
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
import org.jetbrains.kotlin.utils.keysToMap
|
|
||||||
import java.io.ByteArrayInputStream
|
import java.io.ByteArrayInputStream
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -247,20 +250,11 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
rebuildAndCheckOutput(makeOverallResult)
|
rebuildAndCheckOutput(makeOverallResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun readModuleDependencies(): Map<String, List<DependencyDescriptor>>? {
|
private fun readModulesConfig(): ModulesTxt? {
|
||||||
val dependenciesTxt = File(testDataDir, "dependencies.txt")
|
val dependenciesTxtFile = File(testDataDir, "dependencies.txt")
|
||||||
if (!dependenciesTxt.exists()) return null
|
if (!dependenciesTxtFile.exists()) return null
|
||||||
|
|
||||||
val result = HashMap<String, List<DependencyDescriptor>>()
|
return DependenciesTxtBuilder().readFile(dependenciesTxtFile)
|
||||||
for (line in dependenciesTxt.readLines()) {
|
|
||||||
val split = line.split("->")
|
|
||||||
val module = split[0]
|
|
||||||
val dependencies = if (split.size > 1) split[1] else ""
|
|
||||||
val dependencyList = dependencies.split(",").filterNot { it.isEmpty() }
|
|
||||||
result[module] = dependencyList.map(::parseDependency)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun createBuildLog(incrementalMakeResults: List<AbstractIncrementalJpsTest.MakeResult>): String =
|
protected open fun createBuildLog(incrementalMakeResults: List<AbstractIncrementalJpsTest.MakeResult>): String =
|
||||||
@@ -277,10 +271,10 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "jps-build", null)
|
workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "jps-build", null)
|
||||||
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })
|
||||||
|
|
||||||
val moduleNames = configureModules()
|
val modulesTxt = configureModules()
|
||||||
initialMake()
|
initialMake()
|
||||||
|
|
||||||
val otherMakeResults = performModificationsAndMake(moduleNames)
|
val otherMakeResults = performModificationsAndMake(modulesTxt?.modules?.map { it.name })
|
||||||
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
val buildLogFile = buildLogFinder.findBuildLog(testDataDir)
|
||||||
val logs = createBuildLog(otherMakeResults)
|
val logs = createBuildLog(otherMakeResults)
|
||||||
|
|
||||||
@@ -371,7 +365,7 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
|
|
||||||
protected data class MakeResult(val log: String, val makeFailed: Boolean, val mappingsDump: String?)
|
protected data class MakeResult(val log: String, val makeFailed: Boolean, val mappingsDump: String?)
|
||||||
|
|
||||||
private fun performModificationsAndMake(moduleNames: Set<String>?): List<MakeResult> {
|
private fun performModificationsAndMake(moduleNames: Collection<String>?): List<MakeResult> {
|
||||||
val results = arrayListOf<MakeResult>()
|
val results = arrayListOf<MakeResult>()
|
||||||
val modifications = getModificationsToPerform(testDataDir, moduleNames, allowNoFilesWithSuffixInTestData, TouchPolicy.TIMESTAMP)
|
val modifications = getModificationsToPerform(testDataDir, moduleNames, allowNoFilesWithSuffixInTestData, TouchPolicy.TIMESTAMP)
|
||||||
|
|
||||||
@@ -393,55 +387,71 @@ abstract class AbstractIncrementalJpsTest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// null means one module
|
// null means one module
|
||||||
private fun configureModules(): Set<String>? {
|
private fun configureModules(): ModulesTxt? {
|
||||||
fun prepareModuleSources(moduleName: String?) {
|
|
||||||
val sourceDirName = moduleName?.let { "$it/src" } ?: "src"
|
|
||||||
val filePrefix = moduleName?.let { "${it}_" } ?: ""
|
|
||||||
val sourceDestinationDir = File(workDir, sourceDirName)
|
|
||||||
val sourcesMapping = copyTestSources(testDataDir, sourceDestinationDir, filePrefix)
|
|
||||||
mapWorkingToOriginalFile.putAll(sourcesMapping)
|
|
||||||
preProcessSources(sourceDestinationDir)
|
|
||||||
}
|
|
||||||
|
|
||||||
JpsJavaExtensionService.getInstance().getOrCreateProjectExtension(myProject).outputUrl =
|
JpsJavaExtensionService.getInstance().getOrCreateProjectExtension(myProject).outputUrl =
|
||||||
JpsPathUtil.pathToUrl(getAbsolutePath("out"))
|
JpsPathUtil.pathToUrl(getAbsolutePath("out"))
|
||||||
|
|
||||||
val jdk = addJdk("my jdk")
|
val jdk = addJdk("my jdk")
|
||||||
val moduleDependencies = readModuleDependencies()
|
val moduleDependencies = readModulesConfig()
|
||||||
mapWorkingToOriginalFile = hashMapOf()
|
mapWorkingToOriginalFile = hashMapOf()
|
||||||
|
|
||||||
val moduleNames: Set<String>?
|
if (moduleDependencies == null) configureSingleModuleProject(jdk)
|
||||||
if (moduleDependencies == null) {
|
else configureMultiModuleProject(moduleDependencies, jdk)
|
||||||
addModule("module", arrayOf(getAbsolutePath("src")), null, null, jdk)
|
|
||||||
prepareModuleSources(moduleName = null)
|
|
||||||
moduleNames = null
|
|
||||||
} else {
|
|
||||||
val nameToModule = moduleDependencies.keys
|
|
||||||
.keysToMap { addModule(it, arrayOf(getAbsolutePath("$it/src")), null, null, jdk)!! }
|
|
||||||
|
|
||||||
for ((moduleName, dependencies) in moduleDependencies) {
|
addStdlib()
|
||||||
val module = nameToModule[moduleName]!!
|
|
||||||
|
|
||||||
for (dependency in dependencies) {
|
return moduleDependencies
|
||||||
JpsModuleRootModificationUtil.addDependency(
|
|
||||||
module, nameToModule[dependency.name],
|
|
||||||
JpsJavaDependencyScope.COMPILE, dependency.exported
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (module in nameToModule.values) {
|
|
||||||
prepareModuleSources(module.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
moduleNames = nameToModule.keys
|
|
||||||
}
|
|
||||||
|
|
||||||
configureDependencies()
|
|
||||||
return moduleNames
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun configureDependencies() {
|
private fun configureSingleModuleProject(jdk: JpsSdk<JpsDummyElement>?) {
|
||||||
|
addModule("module", arrayOf(getAbsolutePath("src")), null, null, jdk)
|
||||||
|
|
||||||
|
val sourceDestinationDir = File(workDir, "src")
|
||||||
|
val sourcesMapping = copyTestSources(testDataDir, File(workDir, "src"), "")
|
||||||
|
mapWorkingToOriginalFile.putAll(sourcesMapping)
|
||||||
|
|
||||||
|
preProcessSources(sourceDestinationDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureMultiModuleProject(
|
||||||
|
moduleDependencies: ModulesTxt,
|
||||||
|
jdk: JpsSdk<JpsDummyElement>?
|
||||||
|
) {
|
||||||
|
moduleDependencies.modules.forEach { module ->
|
||||||
|
module.jpsModule = addModule(
|
||||||
|
module.name,
|
||||||
|
arrayOf(getAbsolutePath("${module.name}/src")),
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
jdk
|
||||||
|
)!!
|
||||||
|
|
||||||
|
val kotlinFacetSettings = module.kotlinFacetSettings
|
||||||
|
if (kotlinFacetSettings != null) {
|
||||||
|
module.jpsModule.container.setChild(
|
||||||
|
JpsKotlinFacetModuleExtension.KIND,
|
||||||
|
JpsKotlinFacetModuleExtension(kotlinFacetSettings!!)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val sourceDirName = "${module.name}/src"
|
||||||
|
val filePrefix = "${module.name}_"
|
||||||
|
val sourceDestinationDir = File(workDir, sourceDirName)
|
||||||
|
val sourcesMapping = copyTestSources(testDataDir, sourceDestinationDir, filePrefix)
|
||||||
|
mapWorkingToOriginalFile.putAll(sourcesMapping)
|
||||||
|
|
||||||
|
preProcessSources(sourceDestinationDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleDependencies.dependencies.forEach {
|
||||||
|
JpsModuleRootModificationUtil.addDependency(
|
||||||
|
it.from.jpsModule, it.to.jpsModule,
|
||||||
|
it.scope, it.exported
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun addStdlib() {
|
||||||
AbstractKotlinJpsBuildTestCase.addKotlinStdlibDependency(myProject)
|
AbstractKotlinJpsBuildTestCase.addKotlinStdlibDependency(myProject)
|
||||||
AbstractKotlinJpsBuildTestCase.addKotlinTestDependency(myProject)
|
AbstractKotlinJpsBuildTestCase.addKotlinTestDependency(myProject)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ abstract class AbstractIncrementalJsJpsTest : AbstractIncrementalJpsTest() {
|
|||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureDependencies() {
|
override fun addStdlib() {
|
||||||
AbstractKotlinJpsBuildTestCase.addKotlinJavaScriptStdlibDependency(myProject)
|
AbstractKotlinJpsBuildTestCase.addKotlinJavaScriptStdlibDependency(myProject)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-4
@@ -5,10 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.build
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import org.jetbrains.kotlin.jps.build.dependeciestxt.DependenciesTxt
|
|
||||||
import org.jetbrains.kotlin.jps.build.dependeciestxt.MppJpsIncTestsGenerator
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
abstract class AbstractMultiplatformJpsTest : AbstractIncrementalJpsTest() {
|
abstract class AbstractMultiplatformJpsTest : AbstractIncrementalJpsTest() {
|
||||||
override fun doTest(testDataPath: String) {
|
override fun doTest(testDataPath: String) {
|
||||||
// temporary ignore jps-plugin/testData/incremental/multiplatform/multiModule tests
|
// temporary ignore jps-plugin/testData/incremental/multiplatform/multiModule tests
|
||||||
|
|||||||
+28
-17
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.jps.build.dependeciestxt
|
package org.jetbrains.kotlin.jps.build.dependeciestxt
|
||||||
|
|
||||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope
|
import org.jetbrains.jps.model.java.JpsJavaDependencyScope
|
||||||
|
import org.jetbrains.jps.model.module.JpsModule
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
||||||
@@ -22,7 +23,7 @@ import kotlin.reflect.full.memberProperties
|
|||||||
* Dependencies description file.
|
* Dependencies description file.
|
||||||
* See [README.md] for more details.
|
* See [README.md] for more details.
|
||||||
*/
|
*/
|
||||||
data class DependenciesTxt(
|
data class ModulesTxt(
|
||||||
val file: File,
|
val file: File,
|
||||||
val fileName: String,
|
val fileName: String,
|
||||||
val modules: List<Module>,
|
val modules: List<Module>,
|
||||||
@@ -62,6 +63,8 @@ data class DependenciesTxt(
|
|||||||
@Flag
|
@Flag
|
||||||
var editExpectActual: Boolean = false
|
var editExpectActual: Boolean = false
|
||||||
|
|
||||||
|
lateinit var jpsModule: JpsModule
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val flags: Map<String, KMutableProperty1<Module, Boolean>> = Module::class.memberProperties
|
val flags: Map<String, KMutableProperty1<Module, Boolean>> = Module::class.memberProperties
|
||||||
.filter { it.findAnnotation<Flag>() != null }
|
.filter { it.findAnnotation<Flag>() != null }
|
||||||
@@ -98,17 +101,20 @@ class DependenciesTxtBuilder {
|
|||||||
*/
|
*/
|
||||||
class ModuleRef(name: String) {
|
class ModuleRef(name: String) {
|
||||||
var defined: Boolean = false
|
var defined: Boolean = false
|
||||||
var actual: DependenciesTxt.Module = DependenciesTxt.Module(name)
|
var actual: ModulesTxt.Module = ModulesTxt.Module(name)
|
||||||
|
|
||||||
override fun toString() = actual.name
|
override fun toString() = actual.name
|
||||||
|
|
||||||
fun build(index: Int): DependenciesTxt.Module {
|
fun build(index: Int): ModulesTxt.Module {
|
||||||
val result = actual
|
val result = actual
|
||||||
result.index = index
|
result.index = index
|
||||||
val kotlinFacetSettings = result.kotlinFacetSettings
|
val kotlinFacetSettings = result.kotlinFacetSettings
|
||||||
if (kotlinFacetSettings != null) {
|
if (kotlinFacetSettings != null) {
|
||||||
kotlinFacetSettings.implementedModuleNames =
|
kotlinFacetSettings.implementedModuleNames =
|
||||||
result.dependencies.filter { it.expectedBy }.map { it.to.name }
|
result.dependencies.asSequence()
|
||||||
|
.filter { it.expectedBy }
|
||||||
|
.map { it.to.name }
|
||||||
|
.toList()
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -124,20 +130,20 @@ class DependenciesTxtBuilder {
|
|||||||
val expectedBy: Boolean,
|
val expectedBy: Boolean,
|
||||||
val exported: Boolean
|
val exported: Boolean
|
||||||
) {
|
) {
|
||||||
fun build(): DependenciesTxt.Dependency {
|
fun build(): ModulesTxt.Dependency {
|
||||||
if (expectedBy) check(to.actual.isCommonModule) { "$this: ${to.actual} is not common module" }
|
if (expectedBy) check(to.actual.isCommonModule) { "$this: ${to.actual} is not common module" }
|
||||||
return DependenciesTxt.Dependency(from.actual, to.actual, scope, expectedBy, exported)
|
return ModulesTxt.Dependency(from.actual, to.actual, scope, expectedBy, exported)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun readFile(file: File, fileTitle: String = file.toString()): DependenciesTxt {
|
fun readFile(file: File, fileTitle: String = file.toString()): ModulesTxt {
|
||||||
file.forEachLine { line ->
|
file.forEachLine { line ->
|
||||||
parseDeclaration(line)
|
parseDeclaration(line)
|
||||||
}
|
}
|
||||||
|
|
||||||
// module.build() requires built dependencies
|
// module.build() requires built dependencies
|
||||||
val dependencies = dependencies.map { it.build() }
|
val dependencies = dependencies.map { it.build() }
|
||||||
return DependenciesTxt(
|
return ModulesTxt(
|
||||||
file,
|
file,
|
||||||
fileTitle,
|
fileTitle,
|
||||||
modules.values.mapIndexed { index, moduleRef -> moduleRef.build(index) },
|
modules.values.mapIndexed { index, moduleRef -> moduleRef.build(index) },
|
||||||
@@ -190,10 +196,10 @@ class DependenciesTxtBuilder {
|
|||||||
private fun moduleRef(name: String) =
|
private fun moduleRef(name: String) =
|
||||||
modules.getOrPut(name) { ModuleRef(name) }
|
modules.getOrPut(name) { ModuleRef(name) }
|
||||||
|
|
||||||
private fun newModule(def: ValueWithFlags): DependenciesTxt.Module {
|
private fun newModule(def: ValueWithFlags): ModulesTxt.Module {
|
||||||
val name = def.value.trim()
|
val name = def.value.trim()
|
||||||
|
|
||||||
val module = DependenciesTxt.Module(name)
|
val module = ModulesTxt.Module(name)
|
||||||
val kotlinFacetSettings = KotlinFacetSettings()
|
val kotlinFacetSettings = KotlinFacetSettings()
|
||||||
module.kotlinFacetSettings = kotlinFacetSettings
|
module.kotlinFacetSettings = kotlinFacetSettings
|
||||||
|
|
||||||
@@ -213,7 +219,7 @@ class DependenciesTxtBuilder {
|
|||||||
"jvm" -> kotlinFacetSettings.compilerArguments = K2JVMCompilerArguments()
|
"jvm" -> kotlinFacetSettings.compilerArguments = K2JVMCompilerArguments()
|
||||||
"js" -> kotlinFacetSettings.compilerArguments = K2JSCompilerArguments()
|
"js" -> kotlinFacetSettings.compilerArguments = K2JSCompilerArguments()
|
||||||
else -> {
|
else -> {
|
||||||
val flagProperty = DependenciesTxt.Module.flags[flag]
|
val flagProperty = ModulesTxt.Module.flags[flag]
|
||||||
if (flagProperty != null) flagProperty.set(module, true)
|
if (flagProperty != null) flagProperty.set(module, true)
|
||||||
else error("Unknown module flag `$flag`")
|
else error("Unknown module flag `$flag`")
|
||||||
}
|
}
|
||||||
@@ -236,16 +242,21 @@ class DependenciesTxtBuilder {
|
|||||||
return null
|
return null
|
||||||
} else {
|
} else {
|
||||||
var exported = false
|
var exported = false
|
||||||
var scope = JpsJavaDependencyScope.COMPILE
|
var scope: JpsJavaDependencyScope? = null
|
||||||
var expectedBy = false
|
var expectedBy = false
|
||||||
|
|
||||||
|
fun setScope(newScope: JpsJavaDependencyScope) {
|
||||||
|
check(scope == null) { "`$this: $from -> $to` dependency is already flagged as $scope" }
|
||||||
|
scope = newScope
|
||||||
|
}
|
||||||
|
|
||||||
flags.forEach { flag ->
|
flags.forEach { flag ->
|
||||||
when (flag) {
|
when (flag) {
|
||||||
"exported" -> exported = true
|
"exported" -> exported = true
|
||||||
"compile" -> scope = JpsJavaDependencyScope.COMPILE
|
"compile" -> setScope(JpsJavaDependencyScope.COMPILE)
|
||||||
"test" -> scope = JpsJavaDependencyScope.TEST
|
"test" -> setScope(JpsJavaDependencyScope.TEST)
|
||||||
"runtime" -> scope = JpsJavaDependencyScope.RUNTIME
|
"runtime" -> setScope(JpsJavaDependencyScope.RUNTIME)
|
||||||
"provided" -> scope = JpsJavaDependencyScope.PROVIDED
|
"provided" -> setScope(JpsJavaDependencyScope.PROVIDED)
|
||||||
"expectedBy" -> expectedBy = true
|
"expectedBy" -> expectedBy = true
|
||||||
else -> error("Unknown dependency flag `$flag`")
|
else -> error("Unknown dependency flag `$flag`")
|
||||||
}
|
}
|
||||||
@@ -254,7 +265,7 @@ class DependenciesTxtBuilder {
|
|||||||
return DependencyBuilder(
|
return DependencyBuilder(
|
||||||
from = moduleRef(from),
|
from = moduleRef(from),
|
||||||
to = moduleRef(to),
|
to = moduleRef(to),
|
||||||
scope = scope,
|
scope = scope ?: JpsJavaDependencyScope.COMPILE,
|
||||||
expectedBy = expectedBy,
|
expectedBy = expectedBy,
|
||||||
exported = exported
|
exported = exported
|
||||||
).also {
|
).also {
|
||||||
+21
-21
@@ -25,8 +25,8 @@ fun actualizeMppJpsIncTestCaseDirs(rootDir: String, dir: String) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider: (TestCase) -> File) {
|
class MppJpsIncTestsGenerator(val txt: ModulesTxt, val testCaseDirProvider: (TestCase) -> File) {
|
||||||
val DependenciesTxt.Module.capitalName get() = name.capitalize()
|
val ModulesTxt.Module.capitalName get() = name.capitalize()
|
||||||
|
|
||||||
val testCases: List<TestCase>
|
val testCases: List<TestCase>
|
||||||
|
|
||||||
@@ -84,15 +84,15 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class ModuleContentSettings(
|
data class ModuleContentSettings(
|
||||||
val module: DependenciesTxt.Module,
|
val module: ModulesTxt.Module,
|
||||||
val serviceNameSuffix: String = "",
|
val serviceNameSuffix: String = "",
|
||||||
val generateActualDeclarationsFor: List<DependenciesTxt.Module> = module.expectedBy.map { it.to },
|
val generateActualDeclarationsFor: List<ModulesTxt.Module> = module.expectedBy.map { it.to },
|
||||||
val generatePlatformDependent: Boolean = true,
|
val generatePlatformDependent: Boolean = true,
|
||||||
var generateKtFile: Boolean = true,
|
var generateKtFile: Boolean = true,
|
||||||
var generateJavaFile: Boolean = true
|
var generateJavaFile: Boolean = true
|
||||||
)
|
)
|
||||||
|
|
||||||
inner class EditingTestCase(val module: DependenciesTxt.Module, val changeJavaClass: Boolean) : TestCase() {
|
inner class EditingTestCase(val module: ModulesTxt.Module, val changeJavaClass: Boolean) : TestCase() {
|
||||||
override val name: String =
|
override val name: String =
|
||||||
if (changeJavaClass) "editing${module.capitalName}Java"
|
if (changeJavaClass) "editing${module.capitalName}Java"
|
||||||
else "editing${module.capitalName}Kotlin"
|
else "editing${module.capitalName}Kotlin"
|
||||||
@@ -171,7 +171,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class EditingExpectActualTestCase(val commonModule: DependenciesTxt.Module) : TestCase() {
|
inner class EditingExpectActualTestCase(val commonModule: ModulesTxt.Module) : TestCase() {
|
||||||
override val name: String = "editing${commonModule.capitalName}ExpectActual"
|
override val name: String = "editing${commonModule.capitalName}ExpectActual"
|
||||||
override val dir: File = testCaseDirProvider(this)
|
override val dir: File = testCaseDirProvider(this)
|
||||||
|
|
||||||
@@ -244,7 +244,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
|
|
||||||
abstract val dir: File
|
abstract val dir: File
|
||||||
|
|
||||||
private val modules = mutableMapOf<DependenciesTxt.Module, ModuleContentSettings>()
|
private val modules = mutableMapOf<ModulesTxt.Module, ModuleContentSettings>()
|
||||||
|
|
||||||
var step = 1
|
var step = 1
|
||||||
val steps = mutableListOf<String>()
|
val steps = mutableListOf<String>()
|
||||||
@@ -255,7 +255,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
step++
|
step++
|
||||||
}
|
}
|
||||||
|
|
||||||
var DependenciesTxt.Module.contentsSettings: ModuleContentSettings
|
var ModulesTxt.Module.contentsSettings: ModuleContentSettings
|
||||||
get() = modules.getOrPut(this) { ModuleContentSettings(this) }
|
get() = modules.getOrPut(this) { ModuleContentSettings(this) }
|
||||||
set(value) {
|
set(value) {
|
||||||
modules[this] = value
|
modules[this] = value
|
||||||
@@ -273,7 +273,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateModuleContents(module: DependenciesTxt.Module) {
|
private fun generateModuleContents(module: ModulesTxt.Module) {
|
||||||
when {
|
when {
|
||||||
module.isCommonModule -> {
|
module.isCommonModule -> {
|
||||||
// common module
|
// common module
|
||||||
@@ -290,13 +290,13 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val DependenciesTxt.Module.serviceName
|
private val ModulesTxt.Module.serviceName
|
||||||
get() = "$capitalName${contentsSettings.serviceNameSuffix}"
|
get() = "$capitalName${contentsSettings.serviceNameSuffix}"
|
||||||
|
|
||||||
private val DependenciesTxt.Module.javaClassName
|
private val ModulesTxt.Module.javaClassName
|
||||||
get() = "${serviceName}JavaClass"
|
get() = "${serviceName}JavaClass"
|
||||||
|
|
||||||
protected fun serviceKtFile(module: DependenciesTxt.Module, fileNameSuffix: String = ""): File {
|
protected fun serviceKtFile(module: ModulesTxt.Module, fileNameSuffix: String = ""): File {
|
||||||
val suffix =
|
val suffix =
|
||||||
if (module.isCommonModule) "${module.serviceName}Header"
|
if (module.isCommonModule) "${module.serviceName}Header"
|
||||||
else "${module.name.capitalize()}${module.contentsSettings.serviceNameSuffix}Impl"
|
else "${module.name.capitalize()}${module.contentsSettings.serviceNameSuffix}Impl"
|
||||||
@@ -304,30 +304,30 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
return File(dir, "${module.indexedName}_service$suffix.kt$fileNameSuffix")
|
return File(dir, "${module.indexedName}_service$suffix.kt$fileNameSuffix")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun serviceJavaFile(module: DependenciesTxt.Module, fileNameSuffix: String = ""): File {
|
fun serviceJavaFile(module: ModulesTxt.Module, fileNameSuffix: String = ""): File {
|
||||||
return File(dir, "${module.indexedName}_${module.javaClassName}.java$fileNameSuffix")
|
return File(dir, "${module.indexedName}_${module.javaClassName}.java$fileNameSuffix")
|
||||||
}
|
}
|
||||||
|
|
||||||
private val DependenciesTxt.Module.platformDependentFunName: String
|
private val ModulesTxt.Module.platformDependentFunName: String
|
||||||
get() {
|
get() {
|
||||||
check(isCommonModule)
|
check(isCommonModule)
|
||||||
return "${name}_platformDependent$serviceName"
|
return "${name}_platformDependent$serviceName"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val DependenciesTxt.Module.platformIndependentFunName: String
|
private val ModulesTxt.Module.platformIndependentFunName: String
|
||||||
get() {
|
get() {
|
||||||
check(isCommonModule)
|
check(isCommonModule)
|
||||||
return "${name}_platformIndependent$serviceName"
|
return "${name}_platformIndependent$serviceName"
|
||||||
}
|
}
|
||||||
|
|
||||||
private val DependenciesTxt.Module.platformOnlyFunName: String
|
private val ModulesTxt.Module.platformOnlyFunName: String
|
||||||
get() {
|
get() {
|
||||||
// platformOnly fun names already unique, so no module name prefix required
|
// platformOnly fun names already unique, so no module name prefix required
|
||||||
return "${name}_platformOnly${contentsSettings.serviceNameSuffix}"
|
return "${name}_platformOnly${contentsSettings.serviceNameSuffix}"
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun generateCommonFile(
|
protected fun generateCommonFile(
|
||||||
module: DependenciesTxt.Module,
|
module: ModulesTxt.Module,
|
||||||
fileNameSuffix: String = ""
|
fileNameSuffix: String = ""
|
||||||
) {
|
) {
|
||||||
val settings = module.contentsSettings
|
val settings = module.contentsSettings
|
||||||
@@ -343,7 +343,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun generatePlatformFile(
|
protected fun generatePlatformFile(
|
||||||
module: DependenciesTxt.Module,
|
module: ModulesTxt.Module,
|
||||||
fileNameSuffix: String = ""
|
fileNameSuffix: String = ""
|
||||||
) {
|
) {
|
||||||
val isJvm = module.isJvmModule
|
val isJvm = module.isJvmModule
|
||||||
@@ -386,7 +386,7 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
|
|
||||||
// call all functions declared in this module and all of its dependencies recursively
|
// call all functions declared in this module and all of its dependencies recursively
|
||||||
private fun StringBuilder.appendTestFun(
|
private fun StringBuilder.appendTestFun(
|
||||||
module: DependenciesTxt.Module,
|
module: ModulesTxt.Module,
|
||||||
settings: ModuleContentSettings
|
settings: ModuleContentSettings
|
||||||
) {
|
) {
|
||||||
appendln()
|
appendln()
|
||||||
@@ -414,8 +414,8 @@ class MppJpsIncTestsGenerator(val txt: DependenciesTxt, val testCaseDirProvider:
|
|||||||
appendln("}")
|
appendln("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun DependenciesTxt.Module.collectDependenciesRecursivelyTo(
|
private fun ModulesTxt.Module.collectDependenciesRecursivelyTo(
|
||||||
collection: MutableCollection<DependenciesTxt.Module>,
|
collection: MutableCollection<ModulesTxt.Module>,
|
||||||
exportedOnly: Boolean = false
|
exportedOnly: Boolean = false
|
||||||
) {
|
) {
|
||||||
dependencies.forEach {
|
dependencies.forEach {
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
================ Step #1 =================
|
================ Step #1 =================
|
||||||
|
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
||||||
|
Marked as dirty by Kotlin:
|
||||||
|
module4/src/d.kt
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module4/META-INF/module4.kotlin_module
|
||||||
|
out/production/module4/module4/D.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module4/src/d.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
||||||
Marked as dirty by Kotlin:
|
Marked as dirty by Kotlin:
|
||||||
@@ -40,19 +56,3 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module4
|
|
||||||
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
|
||||||
Marked as dirty by Kotlin:
|
|
||||||
module4/src/d.kt
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module4/META-INF/module4.kotlin_module
|
|
||||||
out/production/module4/module4/D.class
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module4/src/d.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module5
|
|
||||||
Exit code: NOTHING_DONE
|
|
||||||
------------------------------------------
|
|
||||||
+13
-13
@@ -6,6 +6,19 @@ Marked as dirty by Kotlin:
|
|||||||
module2/src/b.kt
|
module2/src/b.kt
|
||||||
module3/src/c.kt
|
module3/src/c.kt
|
||||||
module4/src/d.kt
|
module4/src/d.kt
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module4/META-INF/module4.kotlin_module
|
||||||
|
out/production/module4/module4/D.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module4/src/d.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Cleaning output files:
|
Cleaning output files:
|
||||||
out/production/module1/META-INF/module1.kotlin_module
|
out/production/module1/META-INF/module1.kotlin_module
|
||||||
@@ -37,16 +50,3 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module4
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module4/META-INF/module4.kotlin_module
|
|
||||||
out/production/module4/module4/D.class
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module4/src/d.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module5
|
|
||||||
Exit code: NOTHING_DONE
|
|
||||||
------------------------------------------
|
|
||||||
@@ -1,5 +1,21 @@
|
|||||||
================ Step #1 =================
|
================ Step #1 =================
|
||||||
|
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
||||||
|
Marked as dirty by Kotlin:
|
||||||
|
module4/src/d.kt
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module4/META-INF/module4.kotlin_module
|
||||||
|
out/production/module4/module4/D.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module4/src/d.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module1' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
||||||
Marked as dirty by Kotlin:
|
Marked as dirty by Kotlin:
|
||||||
@@ -22,6 +38,12 @@ Name expected
|
|||||||
|
|
||||||
================ Step #2 =================
|
================ Step #2 =================
|
||||||
|
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Compiling files:
|
Compiling files:
|
||||||
module1/src/a.kt
|
module1/src/a.kt
|
||||||
@@ -55,19 +77,3 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module4
|
|
||||||
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID: actual=CacheVersion(version=777) -> expected=CacheVersion(version=9011001)
|
|
||||||
Marked as dirty by Kotlin:
|
|
||||||
module4/src/d.kt
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module4/META-INF/module4.kotlin_module
|
|
||||||
out/production/module4/module4/D.class
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module4/src/d.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module5
|
|
||||||
Exit code: NOTHING_DONE
|
|
||||||
------------------------------------------
|
|
||||||
+29
-13
@@ -7,6 +7,19 @@ Marked as dirty by Kotlin:
|
|||||||
module2/src/b.kt
|
module2/src/b.kt
|
||||||
module3/src/c.kt
|
module3/src/c.kt
|
||||||
module4/src/d.kt
|
module4/src/d.kt
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module4/META-INF/module4.kotlin_module
|
||||||
|
out/production/module4/module4/D.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module4/src/d.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Cleaning output files:
|
Cleaning output files:
|
||||||
out/production/module1/META-INF/module1.kotlin_module
|
out/production/module1/META-INF/module1.kotlin_module
|
||||||
@@ -25,6 +38,22 @@ Name expected
|
|||||||
|
|
||||||
================ Step #2 =================
|
================ Step #2 =================
|
||||||
|
|
||||||
|
Building module5
|
||||||
|
Exit code: NOTHING_DONE
|
||||||
|
------------------------------------------
|
||||||
|
Building module4
|
||||||
|
Local cache for KotlinChunk<KotlinJvmModuleBuildTarget>(Module 'module4' production) are INVALID: actual=null -> expected=CacheVersion(version=9011001)
|
||||||
|
Marked as dirty by Kotlin:
|
||||||
|
module4/src/d.kt
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module4/META-INF/module4.kotlin_module
|
||||||
|
out/production/module4/module4/D.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module4/src/d.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Building module1
|
Building module1
|
||||||
Compiling files:
|
Compiling files:
|
||||||
module1/src/a.kt
|
module1/src/a.kt
|
||||||
@@ -52,16 +81,3 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module4
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module4/META-INF/module4.kotlin_module
|
|
||||||
out/production/module4/module4/D.class
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module4/src/d.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module5
|
|
||||||
Exit code: NOTHING_DONE
|
|
||||||
------------------------------------------
|
|
||||||
@@ -16,16 +16,6 @@ Exit code: ADDITIONAL_PASS_REQUIRED
|
|||||||
------------------------------------------
|
------------------------------------------
|
||||||
Exit code: NOTHING_DONE
|
Exit code: NOTHING_DONE
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module2
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module2/META-INF/module2.kotlin_module
|
|
||||||
out/production/module2/b/BKt.class
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module2/src/b.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module3
|
Building module3
|
||||||
Cleaning output files:
|
Cleaning output files:
|
||||||
out/production/module3/META-INF/module3.kotlin_module
|
out/production/module3/META-INF/module3.kotlin_module
|
||||||
@@ -36,3 +26,13 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
Building module2
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module2/META-INF/module2.kotlin_module
|
||||||
|
out/production/module2/b/BKt.class
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module2/src/b.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
+11
-11
@@ -16,17 +16,6 @@ Exit code: ADDITIONAL_PASS_REQUIRED
|
|||||||
------------------------------------------
|
------------------------------------------
|
||||||
Exit code: NOTHING_DONE
|
Exit code: NOTHING_DONE
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
Building module2
|
|
||||||
Cleaning output files:
|
|
||||||
out/production/module2/module2.js
|
|
||||||
out/production/module2/module2.meta.js
|
|
||||||
out/production/module2/module2/b/b.kjsm
|
|
||||||
End of files
|
|
||||||
Compiling files:
|
|
||||||
module2/src/b.kt
|
|
||||||
End of files
|
|
||||||
Exit code: OK
|
|
||||||
------------------------------------------
|
|
||||||
Building module3
|
Building module3
|
||||||
Cleaning output files:
|
Cleaning output files:
|
||||||
out/production/module3/module3.js
|
out/production/module3/module3.js
|
||||||
@@ -38,3 +27,14 @@ Compiling files:
|
|||||||
End of files
|
End of files
|
||||||
Exit code: OK
|
Exit code: OK
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
Building module2
|
||||||
|
Cleaning output files:
|
||||||
|
out/production/module2/module2.js
|
||||||
|
out/production/module2/module2.meta.js
|
||||||
|
out/production/module2/module2/b/b.kjsm
|
||||||
|
End of files
|
||||||
|
Compiling files:
|
||||||
|
module2/src/b.kt
|
||||||
|
End of files
|
||||||
|
Exit code: OK
|
||||||
|
------------------------------------------
|
||||||
Reference in New Issue
Block a user