Make property collection serializable (with runtime check)
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package kotlin.script.experimental.api
|
package kotlin.script.experimental.api
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.reflect.KType
|
import kotlin.reflect.KType
|
||||||
|
|
||||||
@@ -13,9 +14,9 @@ import kotlin.reflect.KType
|
|||||||
*/
|
*/
|
||||||
class KotlinType private constructor(
|
class KotlinType private constructor(
|
||||||
val typeName: String,
|
val typeName: String,
|
||||||
val fromClass: KClass<*>?
|
@Transient val fromClass: KClass<*>? = null
|
||||||
// TODO: copy properties from KType
|
// TODO: copy properties from KType
|
||||||
) {
|
) : Serializable {
|
||||||
/**
|
/**
|
||||||
* Constructs KotlinType from fully-qualified [qualifiedTypeName] in a dot-separated form, e.g. "org.acme.Outer.Inner"
|
* Constructs KotlinType from fully-qualified [qualifiedTypeName] in a dot-separated form, e.g. "org.acme.Outer.Inner"
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
package kotlin.script.experimental.api
|
package kotlin.script.experimental.api
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.script.experimental.util.PropertiesCollection
|
import kotlin.script.experimental.util.PropertiesCollection
|
||||||
|
|
||||||
@@ -104,17 +105,17 @@ typealias RefineScriptCompilationConfigurationHandler =
|
|||||||
// to make it "hasheable" for cashing
|
// to make it "hasheable" for cashing
|
||||||
class RefineConfigurationBeforeParsingData(
|
class RefineConfigurationBeforeParsingData(
|
||||||
val handler: RefineScriptCompilationConfigurationHandler
|
val handler: RefineScriptCompilationConfigurationHandler
|
||||||
)
|
) : Serializable
|
||||||
|
|
||||||
class RefineConfigurationOnAnnotationsData(
|
class RefineConfigurationOnAnnotationsData(
|
||||||
val annotations: List<KotlinType>,
|
val annotations: List<KotlinType>,
|
||||||
val handler: RefineScriptCompilationConfigurationHandler
|
val handler: RefineScriptCompilationConfigurationHandler
|
||||||
)
|
) : Serializable
|
||||||
|
|
||||||
class RefineConfigurationOnSectionsData(
|
class RefineConfigurationOnSectionsData(
|
||||||
val sections: List<String>,
|
val sections: List<String>,
|
||||||
val handler: RefineScriptCompilationConfigurationHandler
|
val handler: RefineScriptCompilationConfigurationHandler
|
||||||
)
|
) : Serializable
|
||||||
|
|
||||||
|
|
||||||
interface ScriptCompiler {
|
interface ScriptCompiler {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
package kotlin.script.experimental.api
|
package kotlin.script.experimental.api
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import kotlin.script.experimental.util.PropertiesCollection
|
import kotlin.script.experimental.util.PropertiesCollection
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@ data class ResolvingRestrictionRule(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ScriptDependency {
|
interface ScriptDependency : Serializable {
|
||||||
// Q: anything generic here?
|
// Q: anything generic here?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-2
@@ -5,14 +5,25 @@
|
|||||||
|
|
||||||
package kotlin.script.experimental.util
|
package kotlin.script.experimental.util
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
import kotlin.reflect.KType
|
import kotlin.reflect.KType
|
||||||
import kotlin.script.experimental.api.KotlinType
|
import kotlin.script.experimental.api.KotlinType
|
||||||
|
|
||||||
open class PropertiesCollection(private val properties: Map<Key<*>, Any> = emptyMap()) {
|
open class PropertiesCollection(private val properties: Map<Key<*>, Any> = emptyMap()) : Serializable {
|
||||||
|
|
||||||
data class Key<T>(val name: String, val defaultValue: T? = null)
|
class Key<T>(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<T>(private val defaultValue: T? = null) {
|
class PropertyKeyDelegate<T>(private val defaultValue: T? = null) {
|
||||||
operator fun getValue(thisRef: Any?, property: KProperty<*>): Key<T> =
|
operator fun getValue(thisRef: Any?, property: KProperty<*>): Key<T> =
|
||||||
@@ -36,6 +47,9 @@ open class PropertiesCollection(private val properties: Map<Key<*>, Any> = empty
|
|||||||
companion object {
|
companion object {
|
||||||
fun <T> key(defaultValue: T? = null) = PropertyKeyDelegate(defaultValue)
|
fun <T> key(defaultValue: T? = null) = PropertyKeyDelegate(defaultValue)
|
||||||
fun <T> keyCopy(source: Key<T>) = PropertyKeyCopyDelegate(source)
|
fun <T> keyCopy(source: Key<T>) = PropertyKeyCopyDelegate(source)
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
private val serialVersionUID = 0L
|
||||||
}
|
}
|
||||||
|
|
||||||
// properties builder base class (DSL for building properties collection)
|
// properties builder base class (DSL for building properties collection)
|
||||||
|
|||||||
Reference in New Issue
Block a user