Update inline incremental compilation for compile daemon

This commit is contained in:
Alexey Tsvetkov
2015-09-02 14:43:33 +03:00
parent f25c10c4a1
commit 06bfc5a16b
10 changed files with 40 additions and 15 deletions
+1
View File
@@ -10,5 +10,6 @@
<orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="module" module-name="rmi-interface" />
<orderEntry type="module" module-name="frontend.java" />
<orderEntry type="module" module-name="util" />
</component>
</module>
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.rmi.kotlinr
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.rmi.*
import java.io.File
import java.io.OutputStream
@@ -175,10 +176,10 @@ public class KotlinCompilerClient {
}
}
public fun incrementalCompile(compiler: CompileService, args: Array<out String>, caches: Map<String, IncrementalCache>, out: OutputStream): Int {
public fun incrementalCompile(compiler: CompileService, args: Array<out String>, caches: Map<Module, IncrementalCache>, out: OutputStream): Int {
val outStrm = RemoteOutputStreamServer(out)
val cacheServers = hashMapOf<String, RemoteIncrementalCacheServer>()
val cacheServers = hashMapOf<Module, RemoteIncrementalCacheServer>()
try {
caches.mapValuesTo(cacheServers, { RemoteIncrementalCacheServer( it.getValue()) })
return compiler.remoteIncrementalCompile(args, cacheServers, outStrm, CompileService.OutputFormat.XML)
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.rmi.kotlinr
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.load.kotlin.incremental.components.InlineRegistering
import org.jetbrains.kotlin.rmi.CompileService
import java.rmi.server.UnicastRemoteObject
@@ -33,6 +34,10 @@ public class RemoteIncrementalCacheServer(val cache: IncrementalCache) : Compile
override fun getModuleMappingData(): ByteArray? = cache.getModuleMappingData()
override fun getInlineRegistering(): InlineRegistering = cache.getInlineRegistering()
override fun getClassFilePath(internalClassName: String): String = cache.getClassFilePath(internalClassName)
override fun close() {
cache.close()
}
@@ -10,5 +10,6 @@
<orderEntry type="library" name="kotlin-runtime" level="project" />
<orderEntry type="module" module-name="cli-common" />
<orderEntry type="module" module-name="frontend.java" />
<orderEntry type="module" module-name="util" />
</component>
</module>
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.rmi
import org.jetbrains.kotlin.load.kotlin.incremental.components.InlineRegistering
import org.jetbrains.kotlin.modules.Module
import java.rmi.Remote
import java.rmi.RemoteException
@@ -36,6 +38,12 @@ public interface CompileService : Remote {
throws(RemoteException::class)
public fun getModuleMappingData(): ByteArray?
throws(RemoteException::class)
public fun getInlineRegistering(): InlineRegistering
throws(RemoteException::class)
fun getClassFilePath(internalClassName: String): String
throws(RemoteException::class)
public fun close()
}
@@ -55,7 +63,7 @@ public interface CompileService : Remote {
throws(RemoteException::class)
public fun remoteIncrementalCompile(
args: Array<out String>,
caches: Map<String, RemoteIncrementalCache>,
caches: Map<Module, RemoteIncrementalCache>,
outputStream: RemoteOutputStream,
outputFormat: OutputFormat): Int
}
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.rmi.*
import org.jetbrains.kotlin.rmi.service.RemoteIncrementalCacheClient
import org.jetbrains.kotlin.rmi.service.RemoteOutputStreamClient
@@ -80,14 +81,14 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
alive = true
}
public class IncrementalCompilationComponentsImpl(val idToCache: Map<String, CompileService.RemoteIncrementalCache>): IncrementalCompilationComponents {
public class IncrementalCompilationComponentsImpl(val targetToCache: Map<Module, CompileService.RemoteIncrementalCache>): IncrementalCompilationComponents {
// perf: cheap object, but still the pattern may be costly if there are too many calls to cache with the same id (which seems not to be the case now)
override fun getIncrementalCache(moduleId: String): IncrementalCache = RemoteIncrementalCacheClient(idToCache[moduleId]!!)
override fun getIncrementalCache(target: Module): IncrementalCache = RemoteIncrementalCacheClient(targetToCache[target]!!)
// TODO: add appropriate proxy into interaction when lookup tracker is needed
override fun getLookupTracker(): LookupTracker = LookupTracker.DO_NOTHING
}
private fun createCompileServices(incrementalCaches: Map<String, CompileService.RemoteIncrementalCache>): Services =
private fun createCompileServices(incrementalCaches: Map<Module, CompileService.RemoteIncrementalCache>): Services =
Services.Builder()
.register(IncrementalCompilationComponents::class.java, IncrementalCompilationComponentsImpl(incrementalCaches))
// TODO: add remote proxy for cancellation status tracking
@@ -186,7 +187,7 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
}
}
override fun remoteIncrementalCompile(args: Array<out String>, caches: Map<String, CompileService.RemoteIncrementalCache>, outputStream: RemoteOutputStream, outputFormat: CompileService.OutputFormat): Int =
override fun remoteIncrementalCompile(args: Array<out String>, caches: Map<Module, CompileService.RemoteIncrementalCache>, outputStream: RemoteOutputStream, outputFormat: CompileService.OutputFormat): Int =
doCompile(args, outputStream) { printStream ->
when (outputFormat) {
CompileService.OutputFormat.PLAIN -> throw NotImplementedError("Only XML output is supported in remote incremental compilation")
@@ -17,14 +17,19 @@
package org.jetbrains.kotlin.rmi.service
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.load.kotlin.incremental.components.InlineRegistering
import org.jetbrains.kotlin.rmi.CompileService
public class RemoteIncrementalCacheClient(val cache: CompileService.RemoteIncrementalCache): IncrementalCache {
override fun getInlineRegistering(): InlineRegistering = cache.getInlineRegistering()
override fun getObsoletePackageParts(): Collection<String> = cache.getObsoletePackageParts()
override fun getPackagePartData(fqName: String): ByteArray? = cache.getPackagePartData(fqName)
override fun getModuleMappingData(): ByteArray? = cache.getModuleMappingData()
override fun getClassFilePath(internalClassName: String): String = cache.getClassFilePath(internalClassName)
override fun close(): Unit = cache.close()
}
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil;
import org.jetbrains.kotlin.config.CompilerSettings;
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
import org.jetbrains.kotlin.modules.Module;
import org.jetbrains.kotlin.rmi.*;
import org.jetbrains.kotlin.rmi.kotlinr.KotlinCompilerClient;
import org.jetbrains.kotlin.utils.UtilsPackage;
@@ -58,7 +59,7 @@ public class KotlinCompilerRunner {
CompilerSettings compilerSettings,
MessageCollector messageCollector,
CompilerEnvironment environment,
Map<String, IncrementalCache> incrementalCaches,
Map<Module, IncrementalCache> incrementalCaches,
File moduleFile,
OutputItemsCollector collector
) {
@@ -75,7 +76,7 @@ public class KotlinCompilerRunner {
@NotNull CompilerSettings compilerSettings,
@NotNull MessageCollector messageCollector,
@NotNull CompilerEnvironment environment,
Map<String, IncrementalCache> incrementalCaches,
Map<Module, IncrementalCache> incrementalCaches,
@NotNull OutputItemsCollector collector,
@NotNull Collection<File> sourceFiles,
@NotNull List<String> libraryFiles,
@@ -95,7 +96,7 @@ public class KotlinCompilerRunner {
MessageCollector messageCollector,
OutputItemsCollector collector,
CompilerEnvironment environment,
Map<String, IncrementalCache> incrementalCaches
Map<Module, IncrementalCache> incrementalCaches
) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream out = new PrintStream(stream);
@@ -116,7 +117,7 @@ public class KotlinCompilerRunner {
CommonCompilerArguments arguments,
String additionalArguments,
CompilerEnvironment environment,
Map<String, IncrementalCache> incrementalCaches,
Map<Module, IncrementalCache> incrementalCaches,
PrintStream out,
MessageCollector messageCollector
) {
@@ -62,6 +62,7 @@ import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.progress.CompilationCanceledException
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
@@ -319,7 +320,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
return compileToJvm(allCompiledFiles, chunk, commonArguments, context, dirtyFilesHolder, environment,
incrementalCaches.mapKeysTo(HashMap<String, IncrementalCache>(incrementalCaches.size()), { it.getKey().id }),
incrementalCaches.mapKeysTo(HashMap<Module, IncrementalCache>(incrementalCaches.size()),
{ ModuleToModuleBuildTargetAdapter(it.getKey()) }),
filesToCompile, messageCollector)
}
@@ -486,7 +488,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
private fun compileToJs(chunk: ModuleChunk,
commonArguments: CommonCompilerArguments,
environment: CompilerEnvironment,
incrementalCaches: MutableMap<String, IncrementalCache>?,
incrementalCaches: MutableMap<Module, IncrementalCache>?,
messageCollector: MessageCollectorAdapter, project: JpsProject
): OutputItemsCollectorImpl? {
val outputItemCollector = OutputItemsCollectorImpl()
@@ -541,7 +543,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
context: CompileContext,
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
environment: CompilerEnvironment,
incrementalCaches: MutableMap<String, IncrementalCache>?,
incrementalCaches: MutableMap<Module, IncrementalCache>?,
filesToCompile: MultiMap<ModuleBuildTarget, File>, messageCollector: MessageCollectorAdapter
): OutputItemsCollectorImpl? {
val outputItemCollector = OutputItemsCollectorImpl()
@@ -34,7 +34,7 @@ public class IncrementalCompilationComponentsImpl(
override fun getLookupTracker(): LookupTracker = lookupTracker
}
private class ModuleToModuleBuildTargetAdapter(
public class ModuleToModuleBuildTargetAdapter(
private val moduleBuildTarget: ModuleBuildTarget
) : Module {