Make addToWhitelist vararg for compactness. ()

This commit is contained in:
Rick Parker 2017-08-31 13:24:45 +01:00 committed by GitHub
parent 9b3cad30b2
commit 35dec9abdc
6 changed files with 70 additions and 64 deletions
core/src/main/kotlin/net/corda/core/serialization
docs/source
node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization
samples/simm-valuation-demo/src/main/kotlin/net/corda/vega/plugin

@ -1,6 +1,6 @@
package net.corda.core.serialization
interface SerializationCustomization {
fun addToWhitelist(type: Class<*>)
fun addToWhitelist(vararg types: Class<*>)
}

@ -70,6 +70,8 @@ UNRELEASED
* Removed the concept of relevancy from ``LinearState``. The ``ContractState``'s relevancy to the vault can be determined
by the flow context, the vault will process any transaction from a flow which is not derived from transaction resolution verification.
* ``SerializationCustomization.addToWhitelist()` now accepts multiple classes via varargs.
Milestone 14
------------

@ -6,7 +6,10 @@ import com.esotericsoftware.kryo.io.Output
import com.esotericsoftware.kryo.serializers.FieldSerializer
import com.esotericsoftware.kryo.util.DefaultClassResolver
import com.esotericsoftware.kryo.util.Util
import net.corda.core.serialization.*
import net.corda.core.serialization.AttachmentsClassLoader
import net.corda.core.serialization.ClassWhitelist
import net.corda.core.serialization.CordaSerializable
import net.corda.core.serialization.SerializationContext
import net.corda.core.utilities.loggerFor
import java.io.PrintWriter
import java.lang.reflect.Modifier.isAbstract
@ -16,8 +19,10 @@ import java.nio.file.Paths
import java.nio.file.StandardOpenOption
import java.util.*
fun Kryo.addToWhitelist(type: Class<*>) {
((classResolver as? CordaClassResolver)?.whitelist as? MutableClassWhitelist)?.add(type)
fun Kryo.addToWhitelist(vararg types: Class<*>) {
for (type in types) {
((classResolver as? CordaClassResolver)?.whitelist as? MutableClassWhitelist)?.add(type)
}
}
/**

@ -18,54 +18,53 @@ import java.util.*
class DefaultWhitelist : CordaPluginRegistry() {
override fun customizeSerialization(custom: SerializationCustomization): Boolean {
custom.apply {
// TODO: Turn this into an array and use map {}
addToWhitelist(Array<Any>(0, {}).javaClass)
addToWhitelist(Notification::class.java)
addToWhitelist(Notification.Kind::class.java)
addToWhitelist(ArrayList::class.java)
addToWhitelist(listOf<Any>().javaClass) // EmptyList
addToWhitelist(Pair::class.java)
addToWhitelist(ByteArray::class.java)
addToWhitelist(UUID::class.java)
addToWhitelist(LinkedHashSet::class.java)
addToWhitelist(setOf<Unit>().javaClass) // EmptySet
addToWhitelist(Currency::class.java)
addToWhitelist(listOf(Unit).javaClass) // SingletonList
addToWhitelist(setOf(Unit).javaClass) // SingletonSet
addToWhitelist(mapOf(Unit to Unit).javaClass) // SingletonSet
addToWhitelist(NetworkHostAndPort::class.java)
addToWhitelist(SimpleString::class.java)
addToWhitelist(KryoException::class.java)
addToWhitelist(StringBuffer::class.java)
addToWhitelist(Unit::class.java)
addToWhitelist(java.io.ByteArrayInputStream::class.java)
addToWhitelist(java.lang.Class::class.java)
addToWhitelist(java.math.BigDecimal::class.java)
addToWhitelist(java.security.KeyPair::class.java)
addToWhitelist(Array<Any>(0, {}).javaClass,
Notification::class.java,
Notification.Kind::class.java,
ArrayList::class.java,
listOf<Any>().javaClass, // EmptyList
Pair::class.java,
ByteArray::class.java,
UUID::class.java,
LinkedHashSet::class.java,
setOf<Unit>().javaClass, // EmptySet
Currency::class.java,
listOf(Unit).javaClass, // SingletonList
setOf(Unit).javaClass, // SingletonSet
mapOf(Unit to Unit).javaClass, // SingletonSet
NetworkHostAndPort::class.java,
SimpleString::class.java,
KryoException::class.java,
StringBuffer::class.java,
Unit::class.java,
java.io.ByteArrayInputStream::class.java,
java.lang.Class::class.java,
java.math.BigDecimal::class.java,
java.security.KeyPair::class.java,
// Matches the list in TimeSerializers.addDefaultSerializers:
addToWhitelist(java.time.Duration::class.java)
addToWhitelist(java.time.Instant::class.java)
addToWhitelist(java.time.LocalDate::class.java)
addToWhitelist(java.time.LocalDateTime::class.java)
addToWhitelist(java.time.ZoneOffset::class.java)
addToWhitelist(java.time.ZoneId::class.java)
addToWhitelist(java.time.OffsetTime::class.java)
addToWhitelist(java.time.OffsetDateTime::class.java)
addToWhitelist(java.time.ZonedDateTime::class.java)
addToWhitelist(java.time.Year::class.java)
addToWhitelist(java.time.YearMonth::class.java)
addToWhitelist(java.time.MonthDay::class.java)
addToWhitelist(java.time.Period::class.java)
addToWhitelist(java.time.DayOfWeek::class.java) // No custom serialiser but it's an enum.
// Matches the list in TimeSerializers.addDefaultSerializers:
java.time.Duration::class.java,
java.time.Instant::class.java,
java.time.LocalDate::class.java,
java.time.LocalDateTime::class.java,
java.time.ZoneOffset::class.java,
java.time.ZoneId::class.java,
java.time.OffsetTime::class.java,
java.time.OffsetDateTime::class.java,
java.time.ZonedDateTime::class.java,
java.time.Year::class.java,
java.time.YearMonth::class.java,
java.time.MonthDay::class.java,
java.time.Period::class.java,
java.time.DayOfWeek::class.java, // No custom serialiser but it's an enum.
addToWhitelist(java.util.Collections.singletonMap("A", "B").javaClass)
addToWhitelist(java.util.LinkedHashMap::class.java)
addToWhitelist(BigDecimal::class.java)
addToWhitelist(LocalDate::class.java)
addToWhitelist(Period::class.java)
addToWhitelist(BitSet::class.java)
addToWhitelist(OnErrorNotImplementedException::class.java)
java.util.Collections.singletonMap("A", "B").javaClass,
java.util.LinkedHashMap::class.java,
BigDecimal::class.java,
LocalDate::class.java,
Period::class.java,
BitSet::class.java,
OnErrorNotImplementedException::class.java)
}
return true
}

@ -4,7 +4,7 @@ import com.esotericsoftware.kryo.Kryo
import net.corda.core.serialization.SerializationCustomization
class KryoSerializationCustomization(val kryo: Kryo) : SerializationCustomization {
override fun addToWhitelist(type: Class<*>) {
kryo.addToWhitelist(type)
override fun addToWhitelist(vararg types: Class<*>) {
kryo.addToWhitelist(*types)
}
}

@ -26,18 +26,18 @@ class SimmPluginRegistry : CordaPluginRegistry() {
override fun customizeSerialization(custom: SerializationCustomization): Boolean {
custom.apply {
// OpenGamma classes.
addToWhitelist(MultiCurrencyAmount::class.java)
addToWhitelist(Ordering.natural<Comparable<Any>>().javaClass)
addToWhitelist(CurrencyAmount::class.java)
addToWhitelist(Currency::class.java)
addToWhitelist(InitialMarginTriple::class.java)
addToWhitelist(CordaMarketData::class.java)
addToWhitelist(CurrencyParameterSensitivities::class.java)
addToWhitelist(CurrencyParameterSensitivity::class.java)
addToWhitelist(DoubleArray::class.java)
addToWhitelist(CurveName::class.java)
addToWhitelist(TenorDateParameterMetadata::class.java)
addToWhitelist(Tenor::class.java)
addToWhitelist(MultiCurrencyAmount::class.java,
Ordering.natural<Comparable<Any>>().javaClass,
CurrencyAmount::class.java,
Currency::class.java,
InitialMarginTriple::class.java,
CordaMarketData::class.java,
CurrencyParameterSensitivities::class.java,
CurrencyParameterSensitivity::class.java,
DoubleArray::class.java,
CurveName::class.java,
TenorDateParameterMetadata::class.java,
Tenor::class.java)
}
return true
}