Kotlin incremental cache version change should not affect java only modules

This commit is contained in:
Alexey Tsvetkov
2015-11-19 13:48:39 +03:00
parent b1b0da5228
commit a447c39f69
120 changed files with 760 additions and 137 deletions
@@ -28,6 +28,8 @@ import org.jetbrains.jps.builders.impl.BuildTargetRegistryImpl
import org.jetbrains.jps.builders.impl.TargetOutputIndexImpl
import org.jetbrains.jps.builders.java.JavaBuilderUtil
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
import org.jetbrains.jps.builders.java.dependencyView.Mappings
import org.jetbrains.jps.builders.storage.BuildDataPaths
import org.jetbrains.jps.incremental.*
import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.*
import org.jetbrains.jps.incremental.fs.CompilationRound
@@ -73,6 +75,7 @@ import java.util.*
public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
companion object {
private val TARGETS_WITH_CLEARED_CACHES = Key<Set<ModuleBuildTarget>>("Targets with cleared Kotlin caches")
private val HAS_KOTLIN_FILE_NAME = "has-kotlin.txt"
public val KOTLIN_BUILDER_NAME: String = "Kotlin Builder"
public val LOOKUP_TRACKER: JpsElementChildRoleBase<JpsSimpleElement<out LookupTracker>> = JpsElementChildRoleBase.create("lookup tracker")
@@ -91,6 +94,21 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
context.putUserData(TARGETS_WITH_CLEARED_CACHES, data)
}
}
private fun hasKotlin(target: ModuleBuildTarget, paths: BuildDataPaths): Boolean {
val hasKotlinFile = File(paths.getTargetDataRoot(target), HAS_KOTLIN_FILE_NAME)
return hasKotlinFile.exists()
}
private fun setHasKotlin(target: ModuleBuildTarget, paths: BuildDataPaths) {
val hasKotlinFile = File(paths.getTargetDataRoot(target), HAS_KOTLIN_FILE_NAME)
hasKotlinFile.createNewFile()
}
fun clearHasKotlin(target: ModuleBuildTarget, paths: BuildDataPaths) {
val hasKotlinFile = File(paths.getTargetDataRoot(target), HAS_KOTLIN_FILE_NAME)
hasKotlinFile.delete()
}
}
private val statisticsLogger = TeamcityStatisticsLogger()
@@ -123,11 +141,6 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
try {
val exitCode = doBuild(chunk, context, dirtyFilesHolder, messageCollector, outputConsumer)
LOG.debug("Build result: " + exitCode)
if (exitCode != ExitCode.CHUNK_REBUILD_REQUIRED && exitCode != ABORT) {
saveVersions(context, chunk)
}
return exitCode
}
catch (e: StopBuildException) {
@@ -163,17 +176,22 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
val targets = chunk.targets
val requestedToRebuild = context.getUserData(TARGETS_WITH_CLEARED_CACHES) ?: setOf()
val isFullRebuild = JavaBuilderUtil.isForcedRecompilationAllJavaModules(context)
val hasDirtyKotlin = (dirtyFilesHolder.hasDirtyFiles() || dirtyFilesHolder.hasRemovedFiles()) &&
hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk)
if (!isFullRebuild && !requestedToRebuild.containsAll(targets)) {
val exitCode = checkVersions(context, dataManager, targets)
if (exitCode != null) return exitCode
if (!isFullRebuild &&
!requestedToRebuild.containsAll(targets) &&
(hasDirtyKotlin || targets.any { hasKotlin(it, dataManager.dataPaths) }) &&
shouldRebuildBecauseVersionChanged(context, dataManager, targets)
) {
FSOperations.markDirtyRecursively(context, CompilationRound.NEXT, chunk) { KotlinSourceFileCollector.isKotlinSourceFile(it) }
return CHUNK_REBUILD_REQUIRED
}
if (!dirtyFilesHolder.hasDirtyFiles() &&
!dirtyFilesHolder.hasRemovedFiles() ||
!hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk)
) {
if (hasDirtyKotlin) {
targets.forEach { setHasKotlin(it, dataManager.dataPaths) }
}
else {
return NOTHING_DONE
}
@@ -218,6 +236,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
val generatedFiles = getGeneratedFiles(chunk, outputItemCollector)
registerOutputItems(outputConsumer, generatedFiles)
saveVersions(context, chunk)
if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) {
copyJsLibraryFilesIfNeeded(chunk, project)
@@ -330,15 +349,12 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
private fun checkVersions(context: CompileContext, dataManager: BuildDataManager, targets: MutableSet<ModuleBuildTarget>): ExitCode? {
private fun shouldRebuildBecauseVersionChanged(context: CompileContext, dataManager: BuildDataManager, targets: MutableSet<ModuleBuildTarget>): Boolean {
val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths)
val allVersions = cacheVersionsProvider.allVersions(targets)
val actions = allVersions.map { it.checkVersion() }.toSet().sorted()
fun cleanNormalCaches() {
LOG.info("Clearing caches for " + targets.joinToString { it.presentableName })
targets.forEach { dataManager.getKotlinCache(it).clean() }
}
val buildTargetIndex = context.projectDescriptor.buildTargetIndex
val allTargets = buildTargetIndex.allTargets.filterIsInstance<ModuleBuildTarget>().toSet()
for (status in actions) {
when (status) {
@@ -354,29 +370,37 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
}
val buildTargetIndex = context.projectDescriptor.buildTargetIndex
val allTargets = buildTargetIndex.allTargets.filterIsInstance<ModuleBuildTarget>().toSet()
for (target in targets) {
for (target in allTargets) {
dataManager.getKotlinCache(target).clean()
// prevents excessive version checking in parallel compilation (user data is not shared in parallel compilation)
clearHasKotlin(target, dataManager.dataPaths)
}
dataManager.getStorage(KotlinDataContainerTarget, LookupStorageProvider).clean()
registerTargetsWithClearedCaches(context, allTargets)
return CHUNK_REBUILD_REQUIRED
return true
}
CacheVersion.Action.REBUILD_CHUNK -> {
cleanNormalCaches()
LOG.info("Clearing caches for " + targets.joinToString { it.presentableName })
targets.forEach { dataManager.getKotlinCache(it).clean() }
registerTargetsWithClearedCaches(context, targets)
return CHUNK_REBUILD_REQUIRED
return true
}
CacheVersion.Action.CLEAN_NORMAL_CACHES -> {
cleanNormalCaches()
LOG.info("Clearing caches for all targets")
for (target in allTargets) {
dataManager.getKotlinCache(target).clean()
}
}
CacheVersion.Action.CLEAN_EXPERIMENTAL_CACHES -> {
LOG.info("Clearing experimental caches for " + targets.joinToString { it.presentableName })
targets.forEach { dataManager.getKotlinCache(it).cleanExperimental() }
LOG.info("Clearing experimental caches for all targets")
for (target in allTargets) {
dataManager.getKotlinCache(target).cleanExperimental()
}
}
CacheVersion.Action.CLEAN_DATA_CONTAINER -> {
LOG.info("Clearing lookup cache")
@@ -389,7 +413,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
}
return null
return false
}
private fun saveVersions(context: CompileContext, chunk: ModuleChunk) {
@@ -21,10 +21,20 @@ import org.jetbrains.kotlin.jps.incremental.CacheVersionProvider
abstract class AbstractIncrementalCacheVersionChangedTest : AbstractIncrementalJpsTest(allowNoFilesWithSuffixInTestData = true) {
override fun performAdditionalModifications(modifications: List<AbstractIncrementalJpsTest.Modification>) {
val cacheVersionProvider = CacheVersionProvider(projectDescriptor.dataManager.dataPaths)
val versions = getVersions(cacheVersionProvider, projectDescriptor.allModuleTargets)
val versionFiles = versions.map { it.formatVersionFile }.filter { it.exists() }
versionFiles.forEach { it.writeText("777") }
val modifiedFiles = modifications.filterIsInstance<ModifyContent>().map { it.path }
val paths = projectDescriptor.dataManager.dataPaths
val targets = projectDescriptor.allModuleTargets
if (modifiedFiles.any { it.endsWith("clear-has-kotlin") }) {
targets.forEach { KotlinBuilder.clearHasKotlin(it, paths) }
}
if (modifiedFiles.none { it.endsWith("do-not-change-cache-versions") }) {
val cacheVersionProvider = CacheVersionProvider(paths)
val versions = getVersions(cacheVersionProvider, targets)
val versionFiles = versions.map { it.formatVersionFile }.filter { it.exists() }
versionFiles.forEach { it.writeText("777") }
}
}
protected open fun getVersions(cacheVersionProvider: CacheVersionProvider, targets: Iterable<ModuleBuildTarget>) =
@@ -51,8 +51,10 @@ public abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJps
for (modification in modifications) {
if (modification !is AbstractIncrementalJpsTest.ModifyContent) continue
when (File(modification.path).name) {
"incremental-compilation" -> {
val name = File(modification.path).name
when {
name.endsWith("incremental-compilation") -> {
if (modification.dataFile.readAsBool()) {
IncrementalCompilation.enableIncrementalCompilation()
}
@@ -60,7 +62,7 @@ public abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJps
IncrementalCompilation.disableIncrementalCompilation()
}
}
"experimental-compilation" -> {
name.endsWith("experimental-compilation") -> {
if (modification.dataFile.readAsBool()) {
IncrementalCompilation.enableExperimental()
}
@@ -35,12 +35,24 @@ public class DataContainerVersionChangedTestGenerated extends AbstractDataContai
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/cacheVersionChanged"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("clearedHasKotlin")
public void testClearedHasKotlin() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/");
doTest(fileName);
}
@TestMetadata("exportedModule")
public void testExportedModule() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/");
doTest(fileName);
}
@TestMetadata("javaOnlyModulesAreNotAffected")
public void testJavaOnlyModulesAreNotAffected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/");
doTest(fileName);
}
@TestMetadata("module1Modified")
public void testModule1Modified() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/");
@@ -71,10 +83,22 @@ public class DataContainerVersionChangedTestGenerated extends AbstractDataContai
doTest(fileName);
}
@TestMetadata("touchedOnlyJavaFile")
public void testTouchedOnlyJavaFile() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/");
doTest(fileName);
}
@TestMetadata("untouchedFiles")
public void testUntouchedFiles() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/");
doTest(fileName);
}
@TestMetadata("withError")
public void testWithError() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/withError/");
doTest(fileName);
}
}
@@ -41,6 +41,18 @@ public class ExperimentalChangeIncrementalOptionTestGenerated extends AbstractEx
doTest(fileName);
}
@TestMetadata("experimentalOnJavaChanged")
public void testExperimentalOnJavaChanged() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaChanged/");
doTest(fileName);
}
@TestMetadata("experimentalOnJavaOnly")
public void testExperimentalOnJavaOnly() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnJavaOnly/");
doTest(fileName);
}
@TestMetadata("experimentalOnOff")
public void testExperimentalOnOff() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/changeIncrementalOption/experimentalOnOff/");
@@ -35,12 +35,24 @@ public class ExperimentalIncrementalCacheVersionChangedTestGenerated extends Abs
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/cacheVersionChanged"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("clearedHasKotlin")
public void testClearedHasKotlin() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/");
doTest(fileName);
}
@TestMetadata("exportedModule")
public void testExportedModule() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/");
doTest(fileName);
}
@TestMetadata("javaOnlyModulesAreNotAffected")
public void testJavaOnlyModulesAreNotAffected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/");
doTest(fileName);
}
@TestMetadata("module1Modified")
public void testModule1Modified() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/");
@@ -71,10 +83,22 @@ public class ExperimentalIncrementalCacheVersionChangedTestGenerated extends Abs
doTest(fileName);
}
@TestMetadata("touchedOnlyJavaFile")
public void testTouchedOnlyJavaFile() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/");
doTest(fileName);
}
@TestMetadata("untouchedFiles")
public void testUntouchedFiles() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/");
doTest(fileName);
}
@TestMetadata("withError")
public void testWithError() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/withError/");
doTest(fileName);
}
}
@@ -35,12 +35,24 @@ public class IncrementalCacheVersionChangedTestGenerated extends AbstractIncreme
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/cacheVersionChanged"), Pattern.compile("^([^\\.]+)$"), true);
}
@TestMetadata("clearedHasKotlin")
public void testClearedHasKotlin() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/");
doTest(fileName);
}
@TestMetadata("exportedModule")
public void testExportedModule() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/exportedModule/");
doTest(fileName);
}
@TestMetadata("javaOnlyModulesAreNotAffected")
public void testJavaOnlyModulesAreNotAffected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/");
doTest(fileName);
}
@TestMetadata("module1Modified")
public void testModule1Modified() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/");
@@ -71,10 +83,22 @@ public class IncrementalCacheVersionChangedTestGenerated extends AbstractIncreme
doTest(fileName);
}
@TestMetadata("touchedOnlyJavaFile")
public void testTouchedOnlyJavaFile() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/");
doTest(fileName);
}
@TestMetadata("untouchedFiles")
public void testUntouchedFiles() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/untouchedFiles/");
doTest(fileName);
}
@TestMetadata("withError")
public void testWithError() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/cacheVersionChanged/withError/");
doTest(fileName);
}
}
@@ -57,7 +57,8 @@ import java.io.*
import java.util.*
import java.util.regex.Pattern
import java.util.zip.ZipOutputStream
import kotlin.test.*
import kotlin.test.assertFalse
import kotlin.test.assertTrue
public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
companion object {
@@ -234,7 +235,7 @@ public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
val buildResult = makeAll()
buildResult.assertSuccessful()
val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING)
assertEquals("Warning about invalid package prefix in module 2 is expected: $warnings", 2, warnings.size)
assertEquals("Warning about invalid package prefix in module 2 is expected: $warnings", 1, warnings.size)
assertEquals("Invalid package prefix name is ignored: invalid-prefix.test", warnings.first().messageText)
}
@@ -0,0 +1,36 @@
Cleaning output files:
out/production/module1/C.class
End of files
Compiling files:
module1/src/module1_C.java
End of files
Cleaning output files:
out/production/module1/A.class
End of files
Cleaning output files:
out/production/module1/B.class
out/production/module1/C.class
out/production/module1/D.class
End of files
Compiling files:
module1/src/module1_A.kt
module1/src/module1_B.kt
End of files
Compiling files:
module1/src/module1_C.java
module1/src/module1_D.java
End of files
Cleaning output files:
out/production/module2/E.class
End of files
Compiling files:
module2/src/module2_E.kt
End of files
Cleaning output files:
out/production/module3/F.class
End of files
Compiling files:
module3/src/module3_F.kt
End of files
@@ -0,0 +1,36 @@
Cleaning output files:
out/production/module1/C.class
End of files
Compiling files:
module1/src/module1_C.java
End of files
Cleaning output files:
out/production/module1/A.class
End of files
Cleaning output files:
out/production/module1/B.class
out/production/module1/C.class
out/production/module1/D.class
End of files
Compiling files:
module1/src/module1_A.kt
module1/src/module1_B.kt
End of files
Compiling files:
module1/src/module1_C.java
module1/src/module1_D.java
End of files
Cleaning output files:
out/production/module2/E.class
End of files
Compiling files:
module2/src/module2_E.kt
End of files
Cleaning output files:
out/production/module3/F.class
End of files
Compiling files:
module3/src/module3_F.kt
End of files
@@ -0,0 +1,3 @@
module1->
module2->module1
module3->module2
@@ -0,0 +1 @@
class A
@@ -0,0 +1 @@
class B
@@ -0,0 +1 @@
class C {}
@@ -0,0 +1 @@
class C {}
@@ -0,0 +1 @@
class D {}
@@ -0,0 +1 @@
class E
@@ -0,0 +1 @@
class F
@@ -0,0 +1,14 @@
Cleaning output files:
out/production/module1/A.class
End of files
Compiling files:
module1/src/module1_A.java
End of files
Cleaning output files:
out/production/module1/B.class
End of files
Compiling files:
module1/src/module1_B.java
End of files
@@ -0,0 +1,14 @@
Cleaning output files:
out/production/module1/A.class
End of files
Compiling files:
module1/src/module1_A.java
End of files
Cleaning output files:
out/production/module1/B.class
End of files
Compiling files:
module1/src/module1_B.java
End of files
@@ -0,0 +1,3 @@
module1->
module2->module1
module3->module2
@@ -1,10 +1,4 @@
Cleaning output files:
out/production/module5/module5/E.class
End of files
Compiling files:
module5/src/module5_E.java
End of files
Cleaning output files:
out/production/module4/module4/D.class
End of files
Compiling files:
@@ -1,10 +1,4 @@
Cleaning output files:
out/production/module5/module5/E.class
End of files
Compiling files:
module5/src/module5_E.java
End of files
Cleaning output files:
out/production/module4/module4/D.class
End of files
Compiling files:
@@ -7,6 +7,8 @@ module1/src/module1_A.kt
End of files
Cleaning output files:
out/production/module2/b/B.class
End of files
Cleaning output files:
out/production/module2/b/C.class
End of files
Compiling files:
@@ -0,0 +1 @@
class A {}
@@ -0,0 +1 @@
class A {}
@@ -0,0 +1,5 @@
package test
fun f() {
other.other()
}
@@ -0,0 +1,5 @@
package test
fun g() {
other.other()
}
@@ -0,0 +1,17 @@
Cleaning output files:
out/production/module/A.class
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/other/OtherKt.class
out/production/module/test/AKt.class
out/production/module/test/BKt.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/other.kt
End of files
Compiling files:
src/A.java
End of files
@@ -0,0 +1,17 @@
Cleaning output files:
out/production/module/A.class
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/other/OtherKt.class
out/production/module/test/AKt.class
out/production/module/test/BKt.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/other.kt
End of files
Compiling files:
src/A.java
End of files
@@ -0,0 +1,4 @@
package other
fun other() {
}
@@ -0,0 +1,40 @@
Cleaning output files:
out/production/module4/module4/D.class
End of files
Compiling files:
module4/src/module4_d.kt
End of files
Cleaning output files:
out/production/module1/META-INF/module1.kotlin_module
out/production/module1/module1/A.class
out/production/module1/module1/Module1_aKt.class
End of files
Cleaning output files:
out/production/module1/module1/Module1_fKt.class
End of files
Compiling files:
module1/src/module1_a.kt
module1/src/module1_f.kt
End of files
COMPILATION FAILED
Name expected
Compiling files:
module1/src/module1_a.kt
module1/src/module1_f.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/module2/Module2_bKt.class
End of files
Compiling files:
module2/src/module2_b.kt
End of files
Cleaning output files:
out/production/module3/META-INF/module3.kotlin_module
out/production/module3/module3/Module3_cKt.class
End of files
Compiling files:
module3/src/module3_c.kt
End of files
@@ -0,0 +1,38 @@
Cleaning output files:
out/production/module4/module4/D.class
End of files
Compiling files:
module4/src/module4_d.kt
End of files
Cleaning output files:
out/production/module1/META-INF/module1.kotlin_module
out/production/module1/module1/A.class
out/production/module1/module1/Module1_aKt.class
out/production/module1/module1/Module1_fKt.class
End of files
Compiling files:
module1/src/module1_a.kt
module1/src/module1_f.kt
End of files
COMPILATION FAILED
Name expected
Compiling files:
module1/src/module1_a.kt
module1/src/module1_f.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/module2/Module2_bKt.class
End of files
Compiling files:
module2/src/module2_b.kt
End of files
Cleaning output files:
out/production/module3/META-INF/module3.kotlin_module
out/production/module3/module3/Module3_cKt.class
End of files
Compiling files:
module3/src/module3_c.kt
End of files
@@ -0,0 +1,5 @@
module1->
module2->module1
module3->module2
module4->
module5->
@@ -0,0 +1,6 @@
package module1
class A
fun a() {
}
@@ -0,0 +1,3 @@
package module1
class
@@ -0,0 +1,6 @@
package module1
class A
fun a() {
}
@@ -0,0 +1,3 @@
package module1
fun f() {}
@@ -0,0 +1,8 @@
package module2
import module1.*
fun b() {
A()
a()
}
@@ -0,0 +1,7 @@
package module3
import module2.*
fun c() {
b()
}
@@ -0,0 +1,3 @@
package module4
class D
@@ -0,0 +1,3 @@
package module5;
class E {}
@@ -1,26 +1,42 @@
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/A.class
out/production/module/foo/AKt.class
End of files
Cleaning output files:
out/production/module/foo/B.class
out/production/module/foo/BKt.class
out/production/module/foo/C.class
out/production/module/foo/CKt.class
out/production/module1/foo/Z.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/c.kt
module1/src/module1_z.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/A.class
out/production/module2/foo/B.class
out/production/module2/foo/C.class
out/production/module2/foo/Module2_aKt.class
out/production/module2/foo/Module2_bKt.class
out/production/module2/foo/Module2_cKt.class
End of files
Compiling files:
module2/src/module2_a.kt
module2/src/module2_b.kt
module2/src/module2_c.kt
End of files
Cleaning output files:
out/production/module3/foo/D.class
End of files
Compiling files:
module3/src/module3_d.kt
End of files
Cleaning output files:
out/production/module4/foo/E.class
End of files
Compiling files:
module4/src/module4_e.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/A.class
out/production/module/foo/AKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/A.class
out/production/module2/foo/Module2_aKt.class
End of files
Compiling files:
src/a.kt
module2/src/module2_a.kt
End of files
@@ -0,0 +1,4 @@
module1->
module2->module1
module3->module2
module4->module3
@@ -4,10 +4,28 @@ kotlin-data-container
file-to-id.tab
id-to-file.tab
lookups.tab
Module 'module' production
Module 'module1' production
experimental-format-version.txt
format-version.txt
proto.tab
source-to-classes.tab
Module 'module1' tests
Module 'module2' production
experimental-format-version.txt
format-version.txt
package-parts.tab
proto.tab
source-to-classes.tab
Module 'module' tests
Module 'module2' tests
Module 'module3' production
experimental-format-version.txt
format-version.txt
proto.tab
source-to-classes.tab
Module 'module3' tests
Module 'module4' production
experimental-format-version.txt
format-version.txt
proto.tab
source-to-classes.tab
Module 'module4' tests
@@ -0,0 +1,3 @@
package foo
class Z
@@ -0,0 +1,3 @@
package foo
class D
@@ -0,0 +1,3 @@
package foo
class E
@@ -0,0 +1,25 @@
Cleaning output files:
out/production/module1/META-INF/module1.kotlin_module
out/production/module1/Module1_aKt.class
End of files
Compiling files:
module1/src/module1_a.kt
End of files
Cleaning output files:
out/production/module2/B.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/Module2_cKt.class
End of files
Compiling files:
module2/src/module2_c.kt
End of files
Compiling files:
module2/src/module2_B.java
End of files
Cleaning output files:
out/production/module3/META-INF/module3.kotlin_module
out/production/module3/Module3_dKt.class
End of files
Compiling files:
module3/src/module3_d.kt
End of files
@@ -0,0 +1,3 @@
module1->
module2->module1
module3->module2
@@ -0,0 +1,27 @@
kotlin-data-container
data-container-format-version.txt
counters.tab
file-to-id.tab
id-to-file.tab
lookups.tab
Module 'module1' production
experimental-format-version.txt
format-version.txt
package-parts.tab
proto.tab
source-to-classes.tab
Module 'module1' tests
Module 'module2' production
experimental-format-version.txt
format-version.txt
package-parts.tab
proto.tab
source-to-classes.tab
Module 'module2' tests
Module 'module3' production
experimental-format-version.txt
format-version.txt
package-parts.tab
proto.tab
source-to-classes.tab
Module 'module3' tests
@@ -0,0 +1 @@
class A {}
@@ -0,0 +1 @@
class B {}
@@ -0,0 +1,6 @@
Cleaning output files:
out/production/module/A.class
End of files
Compiling files:
src/A.java
End of files
@@ -0,0 +1,3 @@
kotlin-data-container
Module 'module' production
Module 'module' tests
@@ -1,47 +1,63 @@
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/A.class
out/production/module/foo/AKt.class
End of files
Cleaning output files:
out/production/module/foo/B.class
out/production/module/foo/BKt.class
out/production/module/foo/C.class
out/production/module/foo/CKt.class
out/production/module1/foo/Z.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/c.kt
module1/src/module1_z.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/A.class
out/production/module2/foo/B.class
out/production/module2/foo/C.class
out/production/module2/foo/Module2_aKt.class
out/production/module2/foo/Module2_bKt.class
out/production/module2/foo/Module2_cKt.class
End of files
Compiling files:
module2/src/module2_a.kt
module2/src/module2_b.kt
module2/src/module2_c.kt
End of files
Cleaning output files:
out/production/module3/foo/D.class
End of files
Compiling files:
module3/src/module3_d.kt
End of files
Cleaning output files:
out/production/module4/foo/E.class
End of files
Compiling files:
module4/src/module4_e.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/A.class
out/production/module/foo/AKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/A.class
out/production/module2/foo/Module2_aKt.class
End of files
Compiling files:
src/a.kt
module2/src/module2_a.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/A.class
out/production/module/foo/AKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/A.class
out/production/module2/foo/Module2_aKt.class
End of files
Compiling files:
src/a.kt
module2/src/module2_a.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/B.class
out/production/module/foo/BKt.class
out/production/module/foo/C.class
out/production/module/foo/CKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/B.class
out/production/module2/foo/C.class
out/production/module2/foo/Module2_bKt.class
out/production/module2/foo/Module2_cKt.class
End of files
Compiling files:
src/b.kt
src/c.kt
module2/src/module2_b.kt
module2/src/module2_c.kt
End of files
@@ -0,0 +1,4 @@
module1->
module2->module1
module3->module2
module4->module3
@@ -1,7 +1,22 @@
kotlin-data-container
Module 'module' production
Module 'module1' production
format-version.txt
proto.tab
source-to-classes.tab
Module 'module1' tests
Module 'module2' production
format-version.txt
package-parts.tab
proto.tab
source-to-classes.tab
Module 'module' tests
Module 'module2' tests
Module 'module3' production
format-version.txt
proto.tab
source-to-classes.tab
Module 'module3' tests
Module 'module4' production
format-version.txt
proto.tab
source-to-classes.tab
Module 'module4' tests
@@ -0,0 +1,3 @@
package foo
class Z
@@ -0,0 +1,3 @@
package foo
class D
@@ -0,0 +1,3 @@
package foo
class E
@@ -1,20 +1,20 @@
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/AKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/Module2_aKt.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/c.kt
module2/src/module2_a.kt
module2/src/module2_b.kt
module2/src/module2_c.kt
End of files
Cleaning output files:
out/production/module/META-INF/module.kotlin_module
out/production/module/foo/AKt.class
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/foo/Module2_aKt.class
End of files
Compiling files:
src/a.kt
src/b.kt
src/c.kt
module2/src/module2_a.kt
module2/src/module2_b.kt
module2/src/module2_c.kt
End of files
@@ -0,0 +1,4 @@
module1->
module2->module1
module3->module2
module4->module3
@@ -1,3 +1,9 @@
kotlin-data-container
Module 'module' production
Module 'module' tests
Module 'module1' production
Module 'module1' tests
Module 'module2' production
Module 'module2' tests
Module 'module3' production
Module 'module3' tests
Module 'module4' production
Module 'module4' tests
@@ -0,0 +1,3 @@
package foo
class Z

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