From f5ca949f2cb221b9095d12e90b6962fff5a044b5 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Thu, 7 Apr 2016 15:26:42 +0300 Subject: [PATCH] IC: improve logging in tests and fix DataContainerVersionChangedTestGenerated#testWithError Test logging improvements: * print which chunk building in the round for multimodule projects * print actions after cache changed --- .../jps/build/AbstractIncrementalJpsTest.kt | 21 ++++++-- .../jetbrains/kotlin/jps/build/BuildLogger.kt | 15 ++---- .../kotlin/jps/build/FSOperationsHelper.kt | 4 +- .../kotlin/jps/build/KotlinBuilder.kt | 17 +++--- .../cacheVersionChanged/withError/build.log | 12 ++++- .../data-container-version-build.log | 53 ++++++++++++------- 6 files changed, 75 insertions(+), 47 deletions(-) diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index eeef1b5268d..605a25549df 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -25,6 +25,7 @@ import org.apache.log4j.ConsoleAppender import org.apache.log4j.Level import org.apache.log4j.Logger import org.apache.log4j.PatternLayout +import org.jetbrains.jps.ModuleChunk import org.jetbrains.jps.api.CanceledStatus import org.jetbrains.jps.builders.BuildResult import org.jetbrains.jps.builders.CompileScopeTestBuilder @@ -34,16 +35,14 @@ import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerBase import org.jetbrains.jps.builders.java.dependencyView.Callbacks import org.jetbrains.jps.builders.logging.BuildLoggingManager import org.jetbrains.jps.cmdline.ProjectDescriptor -import org.jetbrains.jps.incremental.BuilderRegistry -import org.jetbrains.jps.incremental.IncProjectBuilder -import org.jetbrains.jps.incremental.ModuleBuildTarget -import org.jetbrains.jps.incremental.ModuleLevelBuilder +import org.jetbrains.jps.incremental.* import org.jetbrains.jps.incremental.messages.BuildMessage import org.jetbrains.jps.model.JpsModuleRootModificationUtil import org.jetbrains.jps.model.java.JpsJavaDependencyScope import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.config.IncrementalCompilation +import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.LookupSymbol import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.testingUtils.* @@ -390,13 +389,13 @@ abstract class AbstractIncrementalJpsTest( preProcessSources(sourceDestinationDir) } - var moduleNames: Set? JpsJavaExtensionService.getInstance().getOrCreateProjectExtension(myProject).outputUrl = JpsPathUtil.pathToUrl(getAbsolutePath("out")) val jdk = addJdk("my jdk") val moduleDependencies = readModuleDependencies() mapWorkingToOriginalFile = hashMapOf() + val moduleNames: Set? if (moduleDependencies == null) { addModule("module", arrayOf(getAbsolutePath("src")), null, null, jdk) prepareModuleSources(moduleName = null) @@ -436,10 +435,22 @@ abstract class AbstractIncrementalJpsTest( private val dirtyFiles = ArrayList() + override fun actionsOnCacheVersionChanged(actions: List) { + if (actions.size > 1 && actions.any { it != CacheVersion.Action.DO_NOTHING }) { + logLine("Actions after cache changed: $actions") + } + } + override fun markedAsDirty(files: Iterable) { dirtyFiles.addAll(files) } + override fun buildStarted(context: CompileContext, chunk: ModuleChunk) { + if (context.projectDescriptor.project.modules.size > 1) { + logLine("Building ${chunk.modules.sortedBy { it.name }.joinToString { it.name }}") + } + } + override fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) { if (dirtyFiles.isNotEmpty()) { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/BuildLogger.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/BuildLogger.kt index 6b93c151f52..2de00f7aa69 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/BuildLogger.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/BuildLogger.kt @@ -16,20 +16,15 @@ package org.jetbrains.kotlin.jps.build +import org.jetbrains.jps.ModuleChunk +import org.jetbrains.jps.incremental.CompileContext import org.jetbrains.jps.incremental.ModuleLevelBuilder +import org.jetbrains.kotlin.incremental.CacheVersion import java.io.File interface BuildLogger { + fun actionsOnCacheVersionChanged(actions: List) + fun buildStarted(context: CompileContext, chunk: ModuleChunk) fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) fun markedAsDirty(files: Iterable) - - companion object { - val DO_NOTHING = object : BuildLogger { - override fun buildFinished(exitCode: ModuleLevelBuilder.ExitCode) { - } - - override fun markedAsDirty(files: Iterable) { - } - } - } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt index 50786edee74..7ac1a28f3a5 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt @@ -31,7 +31,7 @@ class FSOperationsHelper( internal var hasMarkedDirty = false private set - private val buildLogger = compileContext.testingContext?.buildLogger ?: BuildLogger.DO_NOTHING + private val buildLogger = compileContext.testingContext?.buildLogger fun markChunk(recursively: Boolean, kotlinOnly: Boolean, excludeFiles: Set = setOf()) { fun shouldMark(file: File): Boolean { @@ -56,7 +56,7 @@ class FSOperationsHelper( filesToMark.removeAll(excludeFiles) log.debug("Mark dirty: $filesToMark") - buildLogger.markedAsDirty(filesToMark) + buildLogger?.markedAsDirty(filesToMark) for (file in filesToMark) { if (!file.exists()) continue diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index f4aec197e4b..105dee96734 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -103,6 +103,8 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { override fun chunkBuildStarted(context: CompileContext, chunk: ModuleChunk) { super.chunkBuildStarted(context, chunk) + context.testingContext?.buildLogger?.buildStarted(context, chunk) + if (JavaBuilderUtil.isForcedRecompilationAllJavaModules(context)) return val targets = chunk.targets @@ -142,9 +144,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { LOG.info("Build result: " + actualExitCode) - context.testingContext?.run { - buildLogger.buildFinished(actualExitCode) - } + context.testingContext?.buildLogger?.buildFinished(actualExitCode) return actualExitCode } @@ -294,7 +294,11 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { val hasKotlin = HasKotlinMarker(dataManager) val rebuildAfterCacheVersionChanged = RebuildAfterCacheVersionChangeMarker(dataManager) - for (status in actions.sorted()) { + val sortedActions = actions.sorted() + + context.testingContext?.buildLogger?.actionsOnCacheVersionChanged(sortedActions) + + for (status in sortedActions) { when (status) { CacheVersion.Action.REBUILD_ALL_KOTLIN -> { LOG.info("Kotlin global lookup map format changed, so rebuild all kotlin") @@ -879,8 +883,3 @@ private fun hasKotlinDirtyOrRemovedFiles( return chunk.targets.any { KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, it).isNotEmpty() } } -private inline fun Logger.debug(message: ()->String) { - if (isDebugEnabled) { - debug(message()) - } -} diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log index 53abd8d0f27..24be8877d3c 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log @@ -1,5 +1,7 @@ ================ Step #1 ================= +Building module1 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module1/META-INF/module1.kotlin_module out/production/module1/module1/A.class @@ -17,12 +19,15 @@ Name expected ================ Step #2 ================= +Building module1 Compiling files: module1/src/a.kt module1/src/f.kt End of files Exit code: OK ------------------------------------------ +Building module2 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module2/META-INF/module2.kotlin_module out/production/module2/module2/BKt.class @@ -32,6 +37,8 @@ Compiling files: End of files Exit code: OK ------------------------------------------ +Building module3 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module3/META-INF/module3.kotlin_module out/production/module3/module3/CKt.class @@ -41,6 +48,8 @@ Compiling files: End of files Exit code: OK ------------------------------------------ +Building module4 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module4/module4/D.class End of files @@ -49,5 +58,6 @@ Compiling files: End of files Exit code: OK ------------------------------------------ +Building module5 Exit code: NOTHING_DONE ------------------------------------------- \ No newline at end of file +------------------------------------------ diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log index ffad4243995..1f7e6e48e2a 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log @@ -1,21 +1,7 @@ ================ Step #1 ================= -Exit code: NOTHING_DONE ------------------------------------------- -Cleaning output files: - out/production/module4/module4/D.class -End of files -Compiling files: - module4/src/d.kt -End of files -Marked as dirty by Kotlin: - module1/src/a.kt - module1/src/f.kt - module2/src/b.kt - module3/src/c.kt - module4/src/d.kt -Exit code: OK ------------------------------------------- +Building module1 +Actions after cache changed: [REBUILD_ALL_KOTLIN, DO_NOTHING] Cleaning output files: out/production/module1/META-INF/module1.kotlin_module out/production/module1/module1/A.class @@ -26,6 +12,12 @@ Compiling files: module1/src/a.kt module1/src/f.kt End of files +Marked as dirty by Kotlin: + module1/src/a.kt + module1/src/f.kt + module2/src/b.kt + module3/src/c.kt + module4/src/d.kt Exit code: ABORT ------------------------------------------ COMPILATION FAILED @@ -33,16 +25,22 @@ Name expected ================ Step #2 ================= -Exit code: NOTHING_DONE ------------------------------------------- -Exit code: NOTHING_DONE ------------------------------------------- +Building module1 +Actions after cache changed: [REBUILD_ALL_KOTLIN, REBUILD_CHUNK] Compiling files: module1/src/a.kt module1/src/f.kt End of files +Marked as dirty by Kotlin: + module1/src/a.kt + module1/src/f.kt + module2/src/b.kt + module3/src/c.kt + module4/src/d.kt Exit code: OK ------------------------------------------ +Building module2 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module2/META-INF/module2.kotlin_module out/production/module2/module2/BKt.class @@ -52,6 +50,8 @@ Compiling files: End of files Exit code: OK ------------------------------------------ +Building module3 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] Cleaning output files: out/production/module3/META-INF/module3.kotlin_module out/production/module3/module3/CKt.class @@ -61,3 +61,16 @@ Compiling files: End of files Exit code: OK ------------------------------------------ +Building module4 +Actions after cache changed: [REBUILD_CHUNK, DO_NOTHING] +Cleaning output files: + 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 +------------------------------------------