Merging callback services into single facade - phase 2 - rewriting interfaces and implementations
This commit is contained in:
+51
-71
@@ -18,89 +18,69 @@ package org.jetbrains.kotlin.rmi.kotlinr
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||||
import org.jetbrains.kotlin.rmi.*
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
|
import org.jetbrains.kotlin.rmi.LoopbackNetworkInterface
|
||||||
|
import org.jetbrains.kotlin.rmi.SOCKET_ANY_FREE_PORT
|
||||||
import java.rmi.server.UnicastRemoteObject
|
import java.rmi.server.UnicastRemoteObject
|
||||||
|
|
||||||
public class RemoteIncrementalCompilationComponentsServer(val base: IncrementalCompilationComponents, val port: Int = SOCKET_ANY_FREE_PORT) : RemoteIncrementalCompilationComponents {
|
|
||||||
|
public class CompilerCallbackServicesFacadeServer(
|
||||||
|
val incrementalCompilationComponents: IncrementalCompilationComponents? = null,
|
||||||
|
val compilationCancelledStatus: CompilationCanceledStatus? = null,
|
||||||
|
port: Int = SOCKET_ANY_FREE_PORT
|
||||||
|
) : CompilerCallbackServicesFacade {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
UnicastRemoteObject.exportObject(this, port, LoopbackNetworkInterface.clientLoopbackSocketFactory, LoopbackNetworkInterface.serverLoopbackSocketFactory)
|
UnicastRemoteObject.exportObject(this, port, LoopbackNetworkInterface.clientLoopbackSocketFactory, LoopbackNetworkInterface.serverLoopbackSocketFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val cacheServers = hashMapOf<TargetId, RemoteIncrementalCacheServer>()
|
|
||||||
private val lookupTrackerServer by lazy { RemoteLookupTrackerServer(base.getLookupTracker()) }
|
|
||||||
|
|
||||||
override fun getIncrementalCache(target: TargetId): RemoteIncrementalCache =
|
|
||||||
cacheServers.get(target) ?: {
|
|
||||||
val newServer = RemoteIncrementalCacheServer(base.getIncrementalCache(target), port)
|
|
||||||
cacheServers.put(target, newServer)
|
|
||||||
newServer
|
|
||||||
}()
|
|
||||||
|
|
||||||
override fun getLookupTracker(): RemoteLookupTracker = lookupTrackerServer
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class RemoteIncrementalCacheServer(val cache: IncrementalCache, port: Int = SOCKET_ANY_FREE_PORT) : RemoteIncrementalCache {
|
|
||||||
|
|
||||||
init {
|
|
||||||
UnicastRemoteObject.exportObject(this, port, LoopbackNetworkInterface.clientLoopbackSocketFactory, LoopbackNetworkInterface.serverLoopbackSocketFactory)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getObsoletePackageParts(): Collection<String> = cache.getObsoletePackageParts()
|
|
||||||
|
|
||||||
override fun getObsoleteMultifileClassFacades(): Collection<String> = cache.getObsoleteMultifileClasses()
|
|
||||||
|
|
||||||
override fun getMultifileFacadeParts(internalName: String): Collection<String>? = cache.getStableMultifileFacadeParts(internalName)
|
|
||||||
|
|
||||||
override fun getMultifileFacade(partInternalName: String): String? = cache.getMultifileFacade(partInternalName)
|
|
||||||
|
|
||||||
override fun getPackagePartData(fqName: String): JvmPackagePartProto? = cache.getPackagePartData(fqName)
|
|
||||||
|
|
||||||
override fun getModuleMappingData(): ByteArray? = cache.getModuleMappingData()
|
|
||||||
|
|
||||||
override fun registerInline(fromPath: String, jvmSignature: String, toPath: String) {
|
|
||||||
cache.registerInline(fromPath, jvmSignature, toPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getClassFilePath(internalClassName: String): String = cache.getClassFilePath(internalClassName)
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
cache.close()
|
|
||||||
}
|
|
||||||
|
|
||||||
public fun disconnect() {
|
public fun disconnect() {
|
||||||
UnicastRemoteObject.unexportObject(this, true)
|
UnicastRemoteObject.unexportObject(this, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun hasIncrementalCaches(): Boolean = incrementalCompilationComponents != null
|
||||||
|
|
||||||
|
override fun hasLookupTracker(): Boolean = incrementalCompilationComponents != null
|
||||||
|
|
||||||
|
override fun hasCompilationCanceledStatus(): Boolean = compilationCancelledStatus != null
|
||||||
|
|
||||||
|
// TODO: consider replacing NPE with other reporting, although NPE here means most probably incorrect usage
|
||||||
|
|
||||||
|
override fun incrementalCache_getObsoletePackageParts(target: TargetId): Collection<String> = incrementalCompilationComponents!!.getIncrementalCache(target).getObsoletePackageParts()
|
||||||
|
|
||||||
|
override fun incrementalCache_getObsoleteMultifileClassFacades(target: TargetId): Collection<String> = incrementalCompilationComponents!!.getIncrementalCache(target).getObsoleteMultifileClasses()
|
||||||
|
|
||||||
|
override fun incrementalCache_getMultifileFacadeParts(target: TargetId, internalName: String): Collection<String>? = incrementalCompilationComponents!!.getIncrementalCache(target).getStableMultifileFacadeParts(internalName)
|
||||||
|
|
||||||
|
override fun incrementalCache_getMultifileFacade(target: TargetId, partInternalName: String): String? = incrementalCompilationComponents!!.getIncrementalCache(target).getMultifileFacade(partInternalName)
|
||||||
|
|
||||||
|
override fun incrementalCache_getPackagePartData(target: TargetId, fqName: String): JvmPackagePartProto? = incrementalCompilationComponents!!.getIncrementalCache(target).getPackagePartData(fqName)
|
||||||
|
|
||||||
|
override fun incrementalCache_getModuleMappingData(target: TargetId): ByteArray? = incrementalCompilationComponents!!.getIncrementalCache(target).getModuleMappingData()
|
||||||
|
|
||||||
|
override fun incrementalCache_registerInline(target: TargetId, fromPath: String, jvmSignature: String, toPath: String) {
|
||||||
|
incrementalCompilationComponents!!.getIncrementalCache(target).registerInline(fromPath, jvmSignature, toPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun incrementalCache_getClassFilePath(target: TargetId, internalClassName: String): String = incrementalCompilationComponents!!.getIncrementalCache(target).getClassFilePath(internalClassName)
|
||||||
|
|
||||||
|
override fun incrementalCache_close(target: TargetId) {
|
||||||
|
incrementalCompilationComponents!!.getIncrementalCache(target).close()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun lookupTracker_record(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
||||||
|
incrementalCompilationComponents!!.getLookupTracker().record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val lookupTracker_isDoNothing: Boolean = incrementalCompilationComponents != null && incrementalCompilationComponents.getLookupTracker() == LookupTracker.DO_NOTHING
|
||||||
|
|
||||||
|
override fun lookupTracker_isDoNothing(): Boolean = lookupTracker_isDoNothing
|
||||||
|
|
||||||
|
override fun compilationCanceledStatus_checkCanceled() {
|
||||||
|
compilationCancelledStatus!!.checkCanceled()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RemoteLookupTrackerServer(val base: LookupTracker, port: Int = SOCKET_ANY_FREE_PORT) : RemoteLookupTracker {
|
|
||||||
|
|
||||||
init {
|
|
||||||
UnicastRemoteObject.exportObject(this, port, LoopbackNetworkInterface.clientLoopbackSocketFactory, LoopbackNetworkInterface.serverLoopbackSocketFactory)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun record(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
|
||||||
base.record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
private val _isDoNothing: Boolean = base == LookupTracker.DO_NOTHING
|
|
||||||
override fun isDoNothing(): Boolean = _isDoNothing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class RemoteCompilationCanceledStatusServer(val base: CompilationCanceledStatus, port: Int = SOCKET_ANY_FREE_PORT) : RemoteCompilationCanceledStatus {
|
|
||||||
|
|
||||||
init {
|
|
||||||
UnicastRemoteObject.exportObject(this, port, LoopbackNetworkInterface.clientLoopbackSocketFactory, LoopbackNetworkInterface.serverLoopbackSocketFactory)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun checkCanceled() {
|
|
||||||
base.checkCanceled()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -114,10 +114,12 @@ public object KotlinCompilerClient {
|
|||||||
public fun compile(compiler: CompileService, args: Array<out String>, out: OutputStream): Int {
|
public fun compile(compiler: CompileService, args: Array<out String>, out: OutputStream): Int {
|
||||||
|
|
||||||
val outStrm = RemoteOutputStreamServer(out)
|
val outStrm = RemoteOutputStreamServer(out)
|
||||||
|
val servicesFacade = CompilerCallbackServicesFacadeServer()
|
||||||
try {
|
try {
|
||||||
return compiler.remoteCompile(args, makeRemoteServices(CompilationServices()), outStrm, CompileService.OutputFormat.PLAIN, outStrm)
|
return compiler.remoteCompile(args, servicesFacade, outStrm, CompileService.OutputFormat.PLAIN, outStrm)
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
servicesFacade.disconnect()
|
||||||
outStrm.disconnect()
|
outStrm.disconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,24 +129,17 @@ public object KotlinCompilerClient {
|
|||||||
|
|
||||||
val compilerOutStreamServer = RemoteOutputStreamServer(compilerOut)
|
val compilerOutStreamServer = RemoteOutputStreamServer(compilerOut)
|
||||||
val daemonOutStreamServer = RemoteOutputStreamServer(daemonOut)
|
val daemonOutStreamServer = RemoteOutputStreamServer(daemonOut)
|
||||||
val cacheServers = hashMapOf<TargetId, RemoteIncrementalCacheServer>()
|
val servicesFacade = CompilerCallbackServicesFacadeServer(incrementalCompilationComponents = services.incrementalCompilationComponents, compilationCancelledStatus = services.compilationCanceledStatus)
|
||||||
try {
|
try {
|
||||||
return profiler.withMeasure(this) { compiler.remoteIncrementalCompile(args, makeRemoteServices(services), compilerOutStreamServer, CompileService.OutputFormat.XML, daemonOutStreamServer) }
|
return profiler.withMeasure(this) { compiler.remoteIncrementalCompile(args, servicesFacade, compilerOutStreamServer, CompileService.OutputFormat.XML, daemonOutStreamServer) }
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
cacheServers.forEach { it.getValue().disconnect() }
|
servicesFacade.disconnect()
|
||||||
compilerOutStreamServer.disconnect()
|
compilerOutStreamServer.disconnect()
|
||||||
daemonOutStreamServer.disconnect()
|
daemonOutStreamServer.disconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun makeRemoteServices(services: CompilationServices): RemoteCompilationServices =
|
|
||||||
RemoteCompilationServices(
|
|
||||||
incrementalCompilationComponents = if (services.incrementalCompilationComponents == null) null else RemoteIncrementalCompilationComponentsServer(services.incrementalCompilationComponents),
|
|
||||||
compilationCanceledStatus = if (services.compilationCanceledStatus == null) null else RemoteCompilationCanceledStatusServer(services.compilationCanceledStatus)
|
|
||||||
)
|
|
||||||
|
|
||||||
data class ClientOptions(
|
data class ClientOptions(
|
||||||
public var stop: Boolean = false
|
public var stop: Boolean = false
|
||||||
) : OptionsGroup {
|
) : OptionsGroup {
|
||||||
@@ -202,11 +197,12 @@ public object KotlinCompilerClient {
|
|||||||
else -> {
|
else -> {
|
||||||
println("Executing daemon compilation with args: " + filteredArgs.joinToString(" "))
|
println("Executing daemon compilation with args: " + filteredArgs.joinToString(" "))
|
||||||
val outStrm = RemoteOutputStreamServer(System.out)
|
val outStrm = RemoteOutputStreamServer(System.out)
|
||||||
|
val servicesFacade = CompilerCallbackServicesFacadeServer()
|
||||||
try {
|
try {
|
||||||
val memBefore = daemon.getUsedMemory() / 1024
|
val memBefore = daemon.getUsedMemory() / 1024
|
||||||
val startTime = System.nanoTime()
|
val startTime = System.nanoTime()
|
||||||
|
|
||||||
val res = daemon.remoteCompile(filteredArgs.toArrayList().toTypedArray(), makeRemoteServices(CompilationServices()), outStrm, CompileService.OutputFormat.PLAIN, outStrm)
|
val res = daemon.remoteCompile(filteredArgs.toArrayList().toTypedArray(), servicesFacade, outStrm, CompileService.OutputFormat.PLAIN, outStrm)
|
||||||
|
|
||||||
val endTime = System.nanoTime()
|
val endTime = System.nanoTime()
|
||||||
println("Compilation result code: $res")
|
println("Compilation result code: $res")
|
||||||
@@ -215,6 +211,7 @@ public object KotlinCompilerClient {
|
|||||||
println("Used memory $memAfter (${"%+d".format(memAfter - memBefore)} kb)")
|
println("Used memory $memAfter (${"%+d".format(memAfter - memBefore)} kb)")
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
servicesFacade.disconnect()
|
||||||
outStrm.disconnect()
|
outStrm.disconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public interface CompileService : Remote {
|
|||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun remoteCompile(
|
public fun remoteCompile(
|
||||||
args: Array<out String>,
|
args: Array<out String>,
|
||||||
services: RemoteCompilationServices,
|
servicesFacade: CompilerCallbackServicesFacade,
|
||||||
compilerOutputStream: RemoteOutputStream,
|
compilerOutputStream: RemoteOutputStream,
|
||||||
outputFormat: OutputFormat,
|
outputFormat: OutputFormat,
|
||||||
serviceOutputStream: RemoteOutputStream
|
serviceOutputStream: RemoteOutputStream
|
||||||
@@ -47,7 +47,7 @@ public interface CompileService : Remote {
|
|||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun remoteIncrementalCompile(
|
public fun remoteIncrementalCompile(
|
||||||
args: Array<out String>,
|
args: Array<out String>,
|
||||||
services: RemoteCompilationServices,
|
servicesFacade: CompilerCallbackServicesFacade,
|
||||||
compilerOutputStream: RemoteOutputStream,
|
compilerOutputStream: RemoteOutputStream,
|
||||||
compilerOutputFormat: OutputFormat,
|
compilerOutputFormat: OutputFormat,
|
||||||
serviceOutputStream: RemoteOutputStream
|
serviceOutputStream: RemoteOutputStream
|
||||||
|
|||||||
+39
-34
@@ -19,42 +19,59 @@ package org.jetbrains.kotlin.rmi
|
|||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import java.io.Serializable
|
|
||||||
import java.rmi.Remote
|
import java.rmi.Remote
|
||||||
import java.rmi.RemoteException
|
import java.rmi.RemoteException
|
||||||
|
|
||||||
public interface RemoteIncrementalCache : Remote {
|
|
||||||
@Throws(RemoteException::class)
|
/**
|
||||||
public fun getObsoletePackageParts(): Collection<String>
|
* common facade for compiler services exposed from client process (e.g. JPS) to the compiler running on daemon
|
||||||
|
* the reason for having common facade is attempt to reduce number of connections between client and daemon
|
||||||
|
* Note: non-standard naming convention used to denote combining several entities in one facade - prefix <entityName>_ is used for every function belonging to the entity
|
||||||
|
*/
|
||||||
|
public interface CompilerCallbackServicesFacade : Remote {
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun getObsoleteMultifileClassFacades(): Collection<String>
|
public fun hasIncrementalCaches(): Boolean
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun getMultifileFacade(partInternalName: String): String?
|
public fun hasLookupTracker(): Boolean
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun getPackagePartData(fqName: String): JvmPackagePartProto?
|
public fun hasCompilationCanceledStatus(): Boolean
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// IncrementalCache
|
||||||
|
@Throws(RemoteException::class)
|
||||||
|
public fun incrementalCache_getObsoletePackageParts(target: TargetId): Collection<String>
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun getModuleMappingData(): ByteArray?
|
public fun incrementalCache_getObsoleteMultifileClassFacades(target: TargetId): Collection<String>
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun registerInline(fromPath: String, jvmSignature: String, toPath: String)
|
public fun incrementalCache_getMultifileFacade(target: TargetId, partInternalName: String): String?
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
fun getClassFilePath(internalClassName: String): String
|
public fun incrementalCache_getPackagePartData(target: TargetId, fqName: String): JvmPackagePartProto?
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun close()
|
public fun incrementalCache_getModuleMappingData(target: TargetId): ByteArray?
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
public fun getMultifileFacadeParts(internalName: String): Collection<String>?
|
public fun incrementalCache_registerInline(target: TargetId, fromPath: String, jvmSignature: String, toPath: String)
|
||||||
}
|
|
||||||
|
|
||||||
public interface RemoteLookupTracker : Remote {
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
fun record(
|
fun incrementalCache_getClassFilePath(target: TargetId, internalClassName: String): String
|
||||||
|
|
||||||
|
@Throws(RemoteException::class)
|
||||||
|
public fun incrementalCache_close(target: TargetId)
|
||||||
|
|
||||||
|
@Throws(RemoteException::class)
|
||||||
|
public fun incrementalCache_getMultifileFacadeParts(target: TargetId, internalName: String): Collection<String>?
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// LookupTracker
|
||||||
|
@Throws(RemoteException::class)
|
||||||
|
fun lookupTracker_record(
|
||||||
lookupContainingFile: String,
|
lookupContainingFile: String,
|
||||||
lookupLine: Int?,
|
lookupLine: Int?,
|
||||||
lookupColumn: Int?,
|
lookupColumn: Int?,
|
||||||
@@ -62,25 +79,13 @@ public interface RemoteLookupTracker : Remote {
|
|||||||
scopeKind: ScopeKind,
|
scopeKind: ScopeKind,
|
||||||
name: String
|
name: String
|
||||||
)
|
)
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
@Throws(RemoteException::class)
|
||||||
fun isDoNothing(): Boolean
|
fun lookupTracker_isDoNothing(): Boolean
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// CompilationCanceledStatus
|
||||||
|
@Throws(RemoteException::class)
|
||||||
|
fun compilationCanceledStatus_checkCanceled(): Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface RemoteIncrementalCompilationComponents : Remote {
|
|
||||||
@Throws(RemoteException::class)
|
|
||||||
public fun getIncrementalCache(target: TargetId): RemoteIncrementalCache
|
|
||||||
|
|
||||||
@Throws(RemoteException::class)
|
|
||||||
public fun getLookupTracker(): RemoteLookupTracker
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface RemoteCompilationCanceledStatus : Remote {
|
|
||||||
@Throws(RemoteException::class)
|
|
||||||
fun checkCanceled(): Unit
|
|
||||||
}
|
|
||||||
|
|
||||||
public data class RemoteCompilationServices(
|
|
||||||
public val incrementalCompilationComponents: RemoteIncrementalCompilationComponents? = null,
|
|
||||||
public val compilationCanceledStatus: RemoteCompilationCanceledStatus? = null
|
|
||||||
) : Serializable
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun remoteCompile(args: Array<out String>,
|
override fun remoteCompile(args: Array<out String>,
|
||||||
services: RemoteCompilationServices,
|
servicesFacade: CompilerCallbackServicesFacade,
|
||||||
compilerOutputStream: RemoteOutputStream,
|
compilerOutputStream: RemoteOutputStream,
|
||||||
outputFormat: CompileService.OutputFormat,
|
outputFormat: CompileService.OutputFormat,
|
||||||
serviceOutputStream: RemoteOutputStream
|
serviceOutputStream: RemoteOutputStream
|
||||||
@@ -67,12 +67,12 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
|
|||||||
doCompile(args, compilerOutputStream, serviceOutputStream) { printStream, profiler ->
|
doCompile(args, compilerOutputStream, serviceOutputStream) { printStream, profiler ->
|
||||||
when (outputFormat) {
|
when (outputFormat) {
|
||||||
CompileService.OutputFormat.PLAIN -> compiler.exec(printStream, *args)
|
CompileService.OutputFormat.PLAIN -> compiler.exec(printStream, *args)
|
||||||
CompileService.OutputFormat.XML -> compiler.execAndOutputXml(printStream, createCompileServices(services, profiler), *args)
|
CompileService.OutputFormat.XML -> compiler.execAndOutputXml(printStream, createCompileServices(servicesFacade, profiler), *args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun remoteIncrementalCompile(args: Array<out String>,
|
override fun remoteIncrementalCompile(args: Array<out String>,
|
||||||
services: RemoteCompilationServices,
|
servicesFacade: CompilerCallbackServicesFacade,
|
||||||
compilerOutputStream: RemoteOutputStream,
|
compilerOutputStream: RemoteOutputStream,
|
||||||
compilerOutputFormat: CompileService.OutputFormat,
|
compilerOutputFormat: CompileService.OutputFormat,
|
||||||
serviceOutputStream: RemoteOutputStream
|
serviceOutputStream: RemoteOutputStream
|
||||||
@@ -80,7 +80,7 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
|
|||||||
doCompile(args, compilerOutputStream, serviceOutputStream) { printStream, profiler ->
|
doCompile(args, compilerOutputStream, serviceOutputStream) { printStream, profiler ->
|
||||||
when (compilerOutputFormat) {
|
when (compilerOutputFormat) {
|
||||||
CompileService.OutputFormat.PLAIN -> throw NotImplementedError("Only XML output is supported in remote incremental compilation")
|
CompileService.OutputFormat.PLAIN -> throw NotImplementedError("Only XML output is supported in remote incremental compilation")
|
||||||
CompileService.OutputFormat.XML -> compiler.execAndOutputXml(printStream, createCompileServices(services, profiler), *args)
|
CompileService.OutputFormat.XML -> compiler.execAndOutputXml(printStream, createCompileServices(servicesFacade, profiler), *args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,10 +134,14 @@ class CompileServiceImpl<Compiler: CLICompiler<*>>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createCompileServices(services: RemoteCompilationServices, rpcProfiler: Profiler): Services {
|
private fun createCompileServices(facade: CompilerCallbackServicesFacade, rpcProfiler: Profiler): Services {
|
||||||
val builder = Services.Builder()
|
val builder = Services.Builder()
|
||||||
services.incrementalCompilationComponents?.let { builder.register(IncrementalCompilationComponents::class.java, RemoteIncrementalCompilationComponentsClient(it, rpcProfiler)) }
|
if (facade.hasIncrementalCaches() || facade.hasLookupTracker()) {
|
||||||
services.compilationCanceledStatus?.let { builder.register(CompilationCanceledStatus::class.java, RemoteCompilationCanceledStatusClient(it, rpcProfiler)) }
|
builder.register(IncrementalCompilationComponents::class.java, RemoteIncrementalCompilationComponentsClient(facade, rpcProfiler))
|
||||||
|
}
|
||||||
|
if (facade.hasCompilationCanceledStatus()) {
|
||||||
|
builder.register(CompilationCanceledStatus::class.java, RemoteCompilationCanceledStatusClient(facade, rpcProfiler))
|
||||||
|
}
|
||||||
return builder.build()
|
return builder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -17,13 +17,13 @@
|
|||||||
package org.jetbrains.kotlin.rmi.service
|
package org.jetbrains.kotlin.rmi.service
|
||||||
|
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
||||||
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.rmi.DummyProfiler
|
import org.jetbrains.kotlin.rmi.DummyProfiler
|
||||||
import org.jetbrains.kotlin.rmi.Profiler
|
import org.jetbrains.kotlin.rmi.Profiler
|
||||||
import org.jetbrains.kotlin.rmi.RemoteCompilationCanceledStatus
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteCompilationCanceledStatusClient(val proxy: RemoteCompilationCanceledStatus, val profiler: Profiler = DummyProfiler()): CompilationCanceledStatus {
|
class RemoteCompilationCanceledStatusClient(val facade: CompilerCallbackServicesFacade, val profiler: Profiler = DummyProfiler()): CompilationCanceledStatus {
|
||||||
override fun checkCanceled() {
|
override fun checkCanceled() {
|
||||||
profiler.withMeasure(this) { proxy.checkCanceled() }
|
profiler.withMeasure(this) { facade.compilationCanceledStatus_checkCanceled() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-11
@@ -18,29 +18,30 @@ package org.jetbrains.kotlin.rmi.service
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.rmi.DummyProfiler
|
import org.jetbrains.kotlin.rmi.DummyProfiler
|
||||||
import org.jetbrains.kotlin.rmi.Profiler
|
import org.jetbrains.kotlin.rmi.Profiler
|
||||||
import org.jetbrains.kotlin.rmi.RemoteIncrementalCache
|
|
||||||
|
|
||||||
public class RemoteIncrementalCacheClient(val cache: RemoteIncrementalCache, val profiler: Profiler = DummyProfiler()): IncrementalCache {
|
public class RemoteIncrementalCacheClient(val facade: CompilerCallbackServicesFacade, val target: TargetId, val profiler: Profiler = DummyProfiler()): IncrementalCache {
|
||||||
|
|
||||||
override fun getObsoletePackageParts(): Collection<String> = profiler.withMeasure(this) { cache.getObsoletePackageParts() }
|
override fun getObsoletePackageParts(): Collection<String> = profiler.withMeasure(this) { facade.incrementalCache_getObsoletePackageParts(target) }
|
||||||
|
|
||||||
override fun getObsoleteMultifileClasses(): Collection<String> = profiler.withMeasure(this) { cache.getObsoleteMultifileClassFacades() }
|
override fun getObsoleteMultifileClasses(): Collection<String> = profiler.withMeasure(this) { facade.incrementalCache_getObsoleteMultifileClassFacades(target) }
|
||||||
|
|
||||||
override fun getStableMultifileFacadeParts(facadeInternalName: String): Collection<String>? = profiler.withMeasure(this) { cache.getMultifileFacadeParts(facadeInternalName) }
|
override fun getStableMultifileFacadeParts(facadeInternalName: String): Collection<String>? = profiler.withMeasure(this) { facade.incrementalCache_getMultifileFacadeParts(target, facadeInternalName) }
|
||||||
|
|
||||||
override fun getPackagePartData(fqName: String): JvmPackagePartProto? = profiler.withMeasure(this) { cache.getPackagePartData(fqName) }
|
override fun getPackagePartData(fqName: String): JvmPackagePartProto? = profiler.withMeasure(this) { facade.incrementalCache_getPackagePartData(target, fqName) }
|
||||||
|
|
||||||
override fun getMultifileFacade(partInternalName: String): String? = profiler.withMeasure(this) { cache.getMultifileFacade(partInternalName) }
|
override fun getMultifileFacade(partInternalName: String): String? = profiler.withMeasure(this) { facade.incrementalCache_getMultifileFacade(target, partInternalName) }
|
||||||
|
|
||||||
override fun getModuleMappingData(): ByteArray? = profiler.withMeasure(this) { cache.getModuleMappingData() }
|
override fun getModuleMappingData(): ByteArray? = profiler.withMeasure(this) { facade.incrementalCache_getModuleMappingData(target) }
|
||||||
|
|
||||||
override fun registerInline(fromPath: String, jvmSignature: String, toPath: String) {
|
override fun registerInline(fromPath: String, jvmSignature: String, toPath: String) {
|
||||||
profiler.withMeasure(this) { cache.registerInline(fromPath, jvmSignature, toPath) }
|
profiler.withMeasure(this) { facade.incrementalCache_registerInline(target, fromPath, jvmSignature, toPath) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getClassFilePath(internalClassName: String): String = profiler.withMeasure(this) { cache.getClassFilePath(internalClassName) }
|
override fun getClassFilePath(internalClassName: String): String = profiler.withMeasure(this) { facade.incrementalCache_getClassFilePath(target,internalClassName) }
|
||||||
|
|
||||||
override fun close(): Unit = profiler.withMeasure(this) { cache.close() }
|
override fun close(): Unit = profiler.withMeasure(this) { facade.incrementalCache_close(target) }
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -20,14 +20,14 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
|
|||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.rmi.DummyProfiler
|
import org.jetbrains.kotlin.rmi.DummyProfiler
|
||||||
import org.jetbrains.kotlin.rmi.Profiler
|
import org.jetbrains.kotlin.rmi.Profiler
|
||||||
import org.jetbrains.kotlin.rmi.RemoteIncrementalCompilationComponents
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteIncrementalCompilationComponentsClient(val proxy: RemoteIncrementalCompilationComponents, val profiler: Profiler = DummyProfiler()) : IncrementalCompilationComponents {
|
class RemoteIncrementalCompilationComponentsClient(val facade: CompilerCallbackServicesFacade, val profiler: Profiler = DummyProfiler()) : IncrementalCompilationComponents {
|
||||||
|
|
||||||
override fun getIncrementalCache(target: TargetId): IncrementalCache = RemoteIncrementalCacheClient(profiler.withMeasure(this) { proxy.getIncrementalCache(target) }, profiler)
|
override fun getIncrementalCache(target: TargetId): IncrementalCache = RemoteIncrementalCacheClient(facade, target, profiler)
|
||||||
|
|
||||||
override fun getLookupTracker(): LookupTracker = RemoteLookupTrackerClient(profiler.withMeasure(this) { proxy.getLookupTracker() }, profiler)
|
override fun getLookupTracker(): LookupTracker = RemoteLookupTrackerClient(facade, profiler)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -18,19 +18,19 @@ package org.jetbrains.kotlin.rmi.service
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.rmi.DummyProfiler
|
import org.jetbrains.kotlin.rmi.DummyProfiler
|
||||||
import org.jetbrains.kotlin.rmi.Profiler
|
import org.jetbrains.kotlin.rmi.Profiler
|
||||||
import org.jetbrains.kotlin.rmi.RemoteLookupTracker
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteLookupTrackerClient(val proxy: RemoteLookupTracker, val profiler: Profiler = DummyProfiler()) : LookupTracker {
|
class RemoteLookupTrackerClient(val facade: CompilerCallbackServicesFacade, val profiler: Profiler = DummyProfiler()) : LookupTracker {
|
||||||
|
|
||||||
private val isDoNothing = profiler.withMeasure(this) { proxy.isDoNothing() }
|
private val isDoNothing = profiler.withMeasure(this) { facade.lookupTracker_isDoNothing() }
|
||||||
|
|
||||||
override fun record(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
override fun record(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
||||||
if (!isDoNothing) {
|
if (!isDoNothing) {
|
||||||
profiler.withMeasure(this) {
|
profiler.withMeasure(this) {
|
||||||
proxy.record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name)
|
facade.lookupTracker_record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user