diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/kotlinType.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/kotlinType.kt index 4a7c8a1c2a5..bf20848496d 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/kotlinType.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/kotlinType.kt @@ -5,6 +5,7 @@ package kotlin.script.experimental.api +import java.io.Serializable import kotlin.reflect.KClass import kotlin.reflect.KType @@ -13,9 +14,9 @@ import kotlin.reflect.KType */ class KotlinType private constructor( val typeName: String, - val fromClass: KClass<*>? + @Transient val fromClass: KClass<*>? = null // TODO: copy properties from KType -) { +) : Serializable { /** * Constructs KotlinType from fully-qualified [qualifiedTypeName] in a dot-separated form, e.g. "org.acme.Outer.Inner" */ diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt index cb597239b0d..5e72e3fa7cf 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptCompilation.kt @@ -7,6 +7,7 @@ package kotlin.script.experimental.api +import java.io.Serializable import kotlin.reflect.KClass import kotlin.script.experimental.util.PropertiesCollection @@ -104,17 +105,17 @@ typealias RefineScriptCompilationConfigurationHandler = // to make it "hasheable" for cashing class RefineConfigurationBeforeParsingData( val handler: RefineScriptCompilationConfigurationHandler -) +) : Serializable class RefineConfigurationOnAnnotationsData( val annotations: List, val handler: RefineScriptCompilationConfigurationHandler -) +) : Serializable class RefineConfigurationOnSectionsData( val sections: List, val handler: RefineScriptCompilationConfigurationHandler -) +) : Serializable interface ScriptCompiler { diff --git a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt index 8c7426501ef..6acfcad4b4f 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/api/scriptData.kt @@ -7,6 +7,7 @@ package kotlin.script.experimental.api +import java.io.Serializable import java.net.URL import kotlin.script.experimental.util.PropertiesCollection @@ -39,7 +40,7 @@ data class ResolvingRestrictionRule( } } -interface ScriptDependency { +interface ScriptDependency : Serializable { // Q: anything generic here? } diff --git a/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt b/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt index ac7ad12ca21..72c0f7943ed 100644 --- a/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt +++ b/libraries/scripting/common/src/kotlin/script/experimental/util/propertiesCollection.kt @@ -5,14 +5,25 @@ package kotlin.script.experimental.util +import java.io.Serializable import kotlin.reflect.KClass import kotlin.reflect.KProperty import kotlin.reflect.KType import kotlin.script.experimental.api.KotlinType -open class PropertiesCollection(private val properties: Map, Any> = emptyMap()) { +open class PropertiesCollection(private val properties: Map, Any> = emptyMap()) : Serializable { - data class Key(val name: String, val defaultValue: T? = null) + class Key(val name: String, @Transient val defaultValue: T? = null) : Serializable { + + override fun equals(other: Any?): Boolean = if (other is Key<*>) name == other.name else false + override fun hashCode(): Int = name.hashCode() + override fun toString(): String = "Key($name)" + + companion object { + @JvmStatic + private val serialVersionUID = 0L + } + } class PropertyKeyDelegate(private val defaultValue: T? = null) { operator fun getValue(thisRef: Any?, property: KProperty<*>): Key = @@ -36,6 +47,9 @@ open class PropertiesCollection(private val properties: Map, Any> = empty companion object { fun key(defaultValue: T? = null) = PropertyKeyDelegate(defaultValue) fun keyCopy(source: Key) = PropertyKeyCopyDelegate(source) + + @JvmStatic + private val serialVersionUID = 0L } // properties builder base class (DSL for building properties collection)