Kotlin incremental cache version change should not affect java only modules
Original commit: a447c39f69
This commit is contained in:
@@ -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) {
|
||||
|
||||
+14
-4
@@ -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>) =
|
||||
|
||||
+5
-3
@@ -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()
|
||||
}
|
||||
|
||||
+24
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+12
@@ -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/");
|
||||
|
||||
+24
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+24
@@ -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
|
||||
+36
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
@@ -0,0 +1 @@
|
||||
class A
|
||||
+1
@@ -0,0 +1 @@
|
||||
class A
|
||||
@@ -0,0 +1 @@
|
||||
class B
|
||||
+1
@@ -0,0 +1 @@
|
||||
class C {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class C {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class D {}
|
||||
@@ -0,0 +1 @@
|
||||
class E
|
||||
@@ -0,0 +1 @@
|
||||
class F
|
||||
+14
@@ -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
|
||||
+14
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
+1
@@ -0,0 +1 @@
|
||||
class A {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class B {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class C {}
|
||||
@@ -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:
|
||||
|
||||
-6
@@ -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:
|
||||
|
||||
+2
@@ -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 {}
|
||||
+1
@@ -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
|
||||
+17
@@ -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
|
||||
+38
@@ -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 {}
|
||||
+32
-16
@@ -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
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
module4->module3
|
||||
+20
-2
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class Z
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class D
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class E
|
||||
+25
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
+27
@@ -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
|
||||
+1
@@ -0,0 +1 @@
|
||||
fun a() {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class B {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class B {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
fun c() {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
fun d() {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class A {}
|
||||
+1
@@ -0,0 +1 @@
|
||||
class B {}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
Cleaning output files:
|
||||
out/production/module/A.class
|
||||
End of files
|
||||
Compiling files:
|
||||
src/A.java
|
||||
End of files
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
kotlin-data-container
|
||||
Module 'module' production
|
||||
Module 'module' tests
|
||||
+43
-27
@@ -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
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
module4->module3
|
||||
+17
-2
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class Z
|
||||
+1
@@ -0,0 +1 @@
|
||||
on
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class D
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class E
|
||||
+10
-10
@@ -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
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
module1->
|
||||
module2->module1
|
||||
module3->module2
|
||||
module4->module3
|
||||
+8
-2
@@ -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
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package foo
|
||||
|
||||
class Z
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user