diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt index b3e7ad57d61..86d5bb564d1 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt @@ -135,7 +135,7 @@ abstract class IncrementalCompilerRunner< caches.platformCache.markDirty(dirtySources) } - protected abstract fun compareAndUpdateCache(caches: CacheManager, generatedFiles: List): CompilationResult + protected abstract fun compareAndUpdateCache(services: Services, caches: CacheManager, generatedFiles: List): CompilationResult protected open fun preBuildHook(args: Args, compilationMode: CompilationMode) {} protected open fun postCompilationHook(exitCode: ExitCode) {} @@ -144,11 +144,22 @@ abstract class IncrementalCompilerRunner< protected open fun additionalDirtyLookupSymbols(): Iterable = emptyList() + protected open fun makeServices( + args: Args, + lookupTracker: LookupTracker, + caches: CacheManager, + compilationMode: CompilationMode + ): Services.Builder = + Services.Builder().apply { + register(LookupTracker::class.java, lookupTracker) + register(CompilationCanceledStatus::class.java, EmptyCompilationCanceledStatus) + } + protected abstract fun runCompiler( sourcesToCompile: Set, args: Args, caches: CacheManager, - services: Services.Builder, + services: Services, messageCollector: MessageCollector ): ExitCode @@ -188,10 +199,7 @@ abstract class IncrementalCompilerRunner< val text = allSourcesToCompile.joinToString(separator = System.getProperty("line.separator")) { it.canonicalPath } dirtySourcesSinceLastTimeFile.writeText(text) - val services = Services.Builder().apply { - register(LookupTracker::class.java, lookupTracker) - register(CompilationCanceledStatus::class.java, EmptyCompilationCanceledStatus) - } + val services = makeServices(args, lookupTracker, caches, compilationMode).build() args.reportOutputFiles = true val outputItemsCollector = OutputItemsCollectorImpl() @@ -218,7 +226,7 @@ abstract class IncrementalCompilerRunner< allGeneratedFiles.addAll(generatedFiles) caches.inputsCache.registerOutputForSourceFiles(generatedFiles) caches.lookupCache.update(lookupTracker, sourcesToCompile, removedKotlinSources) - val compilationResult = compareAndUpdateCache(caches, generatedFiles) + val compilationResult = compareAndUpdateCache(services, caches, generatedFiles) if (compilationMode is CompilationMode.Rebuild) break diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt index 5fd60cd9ec0..8c6b3025854 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import org.jetbrains.kotlin.compilerRunner.ArgumentUtils import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.multiproject.ArtifactChangesProvider import org.jetbrains.kotlin.incremental.multiproject.ChangesRegistry import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader @@ -210,7 +211,7 @@ class IncrementalJvmCompilerRunner( } } - override fun compareAndUpdateCache(caches: IncrementalJvmCachesManager, generatedFiles: List): CompilationResult = + override fun compareAndUpdateCache(services: Services, caches: IncrementalJvmCachesManager, generatedFiles: List): CompilationResult = updateIncrementalCache(generatedFiles, caches.platformCache) override fun additionalDirtyFiles( @@ -256,11 +257,24 @@ class IncrementalJvmCompilerRunner( override fun additionalDirtyLookupSymbols(): Iterable = javaFilesProcessor.allChangedSymbols + override fun makeServices( + args: K2JVMCompilerArguments, + lookupTracker: LookupTracker, + caches: IncrementalJvmCachesManager, + compilationMode: CompilationMode + ): Services.Builder = + super.makeServices(args, lookupTracker, caches, compilationMode).apply { + val targetId = TargetId(args.moduleName!!, "java-production") + val targetToCache = mapOf(targetId to caches.platformCache) + val incrementalComponents = IncrementalCompilationComponentsImpl(targetToCache) + register(IncrementalCompilationComponents::class.java, incrementalComponents) + } + override fun runCompiler( sourcesToCompile: Set, args: K2JVMCompilerArguments, caches: IncrementalJvmCachesManager, - services: Services.Builder, + services: Services, messageCollector: MessageCollector ): ExitCode { val compiler = K2JVMCompiler() @@ -278,14 +292,9 @@ class IncrementalJvmCompilerRunner( args.buildFile = moduleFile.absolutePath try { - val targetId = TargetId(args.buildFile!!, "java-production") - val targetToCache = mapOf(targetId to caches.platformCache) - val incrementalComponents = IncrementalCompilationComponentsImpl(targetToCache) - services.register(IncrementalCompilationComponents::class.java, incrementalComponents) - reporter.report { "compiling with args: ${ArgumentUtils.convertArgumentsToStringList(args)}" } reporter.report { "compiling with classpath: ${classpath.toList().sorted().joinToString()}" } - val exitCode = compiler.exec(messageCollector, services.build(), args) + val exitCode = compiler.exec(messageCollector, services, args) reporter.reportCompileIteration(sourcesToCompile, exitCode) return exitCode }