diff --git a/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/KotlinCompilerClient.kt b/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/KotlinCompilerClient.kt index 64f4ccf277f..2bf4b1724ae 100644 --- a/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/KotlinCompilerClient.kt +++ b/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/KotlinCompilerClient.kt @@ -271,7 +271,7 @@ public object KotlinCompilerClient { } .filterNotNull() .toList() - return when (daemons.size()) { + return when (daemons.size) { 0 -> null 1 -> daemons.first() else -> throw IllegalStateException("Multiple daemons serving the same compiler, reset with the cleanup required") diff --git a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/NetworkUtils.kt b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/NetworkUtils.kt index 633e5c5f449..440af4c8206 100644 --- a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/NetworkUtils.kt +++ b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/NetworkUtils.kt @@ -50,15 +50,19 @@ public object LoopbackNetworkInterface { } } + // base socket factories by default don't implement equals properly (see e.g. http://stackoverflow.com/questions/21555710/rmi-and-jmx-socket-factories) + // so implementing it in derived classes using the fact that they are singletons - data class ServerLoopbackSocketFactory : RMIServerSocketFactory, Serializable { + class ServerLoopbackSocketFactory : RMIServerSocketFactory, Serializable { + override fun equals(other: Any?): Boolean = other === this || super.equals(other) @Throws(IOException::class) override fun createServerSocket(port: Int): ServerSocket = ServerSocket(port, SERVER_SOCKET_BACKLOG_SIZE, InetAddress.getByName(loopbackInetAddressName)) } - data class ClientLoopbackSocketFactory : RMIClientSocketFactory, Serializable { + class ClientLoopbackSocketFactory : RMIClientSocketFactory, Serializable { + override fun equals(other: Any?): Boolean = other === this || super.equals(other) @Throws(IOException::class) override fun createSocket(host: String, port: Int): Socket = Socket(InetAddress.getByName(loopbackInetAddressName), port) diff --git a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileServiceImpl.kt b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileServiceImpl.kt index b1a323ffbac..9090dd20de8 100644 --- a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileServiceImpl.kt +++ b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/CompileServiceImpl.kt @@ -209,11 +209,4 @@ class CompileServiceImpl( if (!alive) throw IllegalStateException("Kotlin Compiler Service is not in alive state") body() } - - // sometimes used for debugging - fun spy(msg: String, body: () -> R): R { - val res = body() - log.info(msg + " = " + res.toString()) - return res - } } diff --git a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/DaemonPermissions.kt b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/DaemonPermissions.kt deleted file mode 100644 index 909e1a6dd1f..00000000000 --- a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/DaemonPermissions.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.rmi.service - -import java.io.FilePermission -import java.net.SocketPermission -import java.security.CodeSource -import java.security.Permission -import java.security.PermissionCollection -import java.security.Policy -import java.util.ArrayList -import java.util.Collections -import java.util.Enumeration -import java.util.PropertyPermission - - -public class DaemonPolicy(val port: Int) : Policy() { - - private fun createPermissions(): PermissionCollection { - val perms = DaemonPermissionCollection() - - val socketPermission = SocketPermission("localhost:$port-", "connect, accept, resolve") - val propertyPermission = PropertyPermission("localhost:$port", "read") - //val filePermission = FilePermission("<>", "read") - - perms.add(socketPermission) - perms.add(propertyPermission) - //perms.add(filePermission) - - return perms - } - - private val perms: PermissionCollection by lazy { createPermissions() } - - override fun getPermissions(codesource: CodeSource?): PermissionCollection { - return perms - } -} - - -class DaemonPermissionCollection : PermissionCollection() { - val perms = ArrayList() - - override fun add(p: Permission) { - perms.add(p) - } - - override fun implies(p: Permission): Boolean = perms.any { implies(p) } - - override fun elements(): Enumeration = Collections.enumeration(perms) - - override fun isReadOnly(): Boolean = false -// -// companion object { -// -// private val serialVersionUID = 614300921365729272L -// } - -} - - -public fun setDaemonPpermissions(port: Int) { - Policy.setPolicy(DaemonPolicy(port)) -} -