Skip to content

Commit

Permalink
Add hashCode and equals to XmlTypeDescriptor. Fix hashCode for
Browse files Browse the repository at this point in the history
XmlDescriptor (don't include the codecBase in the hashCode). Remove
XmlCodecBase from the XmlDescriptor code (only use config and
serializersModule). This may have some impact on esoteric applications
of `XmlDefault` where the value is dependent upon the configuration
used (this is not stable in any case). Remove the policy property from
XmlDescriptor (it shouldn't have been there anyway).
  • Loading branch information
pdvrieze committed Apr 17, 2023
1 parent e6267af commit 52fb6a4
Show file tree
Hide file tree
Showing 7 changed files with 227 additions and 199 deletions.
13 changes: 7 additions & 6 deletions serialization/api/android/serialization.api
Original file line number Diff line number Diff line change
Expand Up @@ -706,16 +706,15 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlCompositeDes
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor : nl/adaptivity/xmlutil/serialization/structure/SafeXmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getEffectiveOutputKind ()Lnl/adaptivity/xmlutil/serialization/OutputKind;
public fun getElementDescriptor (I)Lnl/adaptivity/xmlutil/serialization/structure/XmlDescriptor;
public fun getElementsCount ()I
public fun getKind ()Lkotlinx/serialization/descriptors/SerialKind;
public final fun getNamespaceDecls ()Ljava/util/List;
public final fun getOverriddenSerializer ()Lkotlinx/serialization/KSerializer;
public final fun getPolicy ()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;
public fun getSerialDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun getSerialKind ()Lkotlinx/serialization/descriptors/SerialKind;
public fun getTagName ()Ljavax/xml/namespace/QName;
Expand Down Expand Up @@ -750,8 +749,8 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlListDescript
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlListLikeDescriptor : nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlConfig;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlConfig;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getDoInline ()Z
public final fun getPreserveSpace ()Z
Expand Down Expand Up @@ -813,16 +812,18 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlRootDescript
}

public final class nl/adaptivity/xmlutil/serialization/structure/XmlTypeDescriptor {
public fun equals (Ljava/lang/Object;)Z
public final fun get (I)Lnl/adaptivity/xmlutil/serialization/structure/XmlTypeDescriptor;
public final fun getElementsCount ()I
public final fun getSerialDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun getSerialName ()Ljava/lang/String;
public final fun getTypeNameInfo ()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$DeclaredNameInfo;
public final fun getTypeQname ()Ljavax/xml/namespace/QName;
public fun hashCode ()I
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlValueDescriptor : nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun defaultValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
Expand Down
13 changes: 7 additions & 6 deletions serialization/api/jvm/serialization.api
Original file line number Diff line number Diff line change
Expand Up @@ -706,16 +706,15 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlCompositeDes
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor : nl/adaptivity/xmlutil/serialization/structure/SafeXmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getEffectiveOutputKind ()Lnl/adaptivity/xmlutil/serialization/OutputKind;
public fun getElementDescriptor (I)Lnl/adaptivity/xmlutil/serialization/structure/XmlDescriptor;
public fun getElementsCount ()I
public fun getKind ()Lkotlinx/serialization/descriptors/SerialKind;
public final fun getNamespaceDecls ()Ljava/util/List;
public final fun getOverriddenSerializer ()Lkotlinx/serialization/KSerializer;
public final fun getPolicy ()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;
public fun getSerialDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun getSerialKind ()Lkotlinx/serialization/descriptors/SerialKind;
public fun getTagName ()Ljavax/xml/namespace/QName;
Expand Down Expand Up @@ -750,8 +749,8 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlListDescript
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlListLikeDescriptor : nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlConfig;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlConfig;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun equals (Ljava/lang/Object;)Z
public final fun getDoInline ()Z
public final fun getPreserveSpace ()Z
Expand Down Expand Up @@ -813,16 +812,18 @@ public final class nl/adaptivity/xmlutil/serialization/structure/XmlRootDescript
}

public final class nl/adaptivity/xmlutil/serialization/structure/XmlTypeDescriptor {
public fun equals (Ljava/lang/Object;)Z
public final fun get (I)Lnl/adaptivity/xmlutil/serialization/structure/XmlTypeDescriptor;
public final fun getElementsCount ()I
public final fun getSerialDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun getSerialName ()Ljava/lang/String;
public final fun getTypeNameInfo ()Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy$DeclaredNameInfo;
public final fun getTypeQname ()Ljavax/xml/namespace/QName;
public fun hashCode ()I
}

public abstract class nl/adaptivity/xmlutil/serialization/structure/XmlValueDescriptor : nl/adaptivity/xmlutil/serialization/structure/XmlDescriptor {
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlCodecBase;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Lnl/adaptivity/xmlutil/serialization/XmlSerializationPolicy;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lnl/adaptivity/xmlutil/serialization/structure/SafeParentInfo;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun defaultValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
Expand Down
5 changes: 5 additions & 0 deletions serialization/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ kotlin {

val inlineSupportTest by creating {
dependsOn(commonMain)
dependsOn(commonTest)
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}

val javaShared by creating {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ package nl.adaptivity.xmlutil.serialization

import kotlinx.serialization.*
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.SerialKind
import kotlinx.serialization.descriptors.StructureKind
import kotlinx.serialization.encoding.CompositeDecoder
import kotlinx.serialization.modules.EmptySerializersModule
import kotlinx.serialization.modules.SerializersModule
Expand Down Expand Up @@ -203,8 +201,7 @@ public class XML constructor(
target.indentString = config.indentString

if (prefix != null) {
val xmlEncoderBase = XmlEncoderBase(serializersModule, config, target)
val root = XmlRootDescriptor(xmlEncoderBase, serializer.descriptor, null)
val root = XmlRootDescriptor(config, serializersModule, serializer.descriptor, null)

val serialQName = root.getElementDescriptor(0).tagName.copy(prefix = prefix)

Expand Down Expand Up @@ -233,7 +230,6 @@ public class XML constructor(
target.indentString = config.indentString

if (target.depth == 0) {
@Suppress("NON_EXHAUSTIVE_WHEN")
when (config.xmlDeclMode) {
XmlDeclMode.Minimal -> {
target.startDocument(config.xmlVersion.versionString)
Expand All @@ -249,11 +245,11 @@ public class XML constructor(
}
}

val xmlEncoderBase = XmlEncoderBase(serializersModule, config, target)
val root = XmlRootDescriptor(xmlEncoderBase, serializer.descriptor, rootName)
val root = XmlRootDescriptor(config, serializersModule, serializer.descriptor, rootName)

val xmlDescriptor = root.getElementDescriptor(0)

val xmlEncoderBase = XmlEncoderBase(serializersModule, config, target)
val encoder = when {
config.isCollectingNSAttributes -> {
val collectedNamespaces = collectNamespaces(xmlDescriptor, xmlEncoderBase, serializer, value)
Expand All @@ -263,11 +259,11 @@ public class XML constructor(
})
val remappedEncoderBase = XmlEncoderBase(serializersModule, newConfig, target)
val newRootName = rootName?.remapPrefix(prefixMap)
val newRoot = XmlRootDescriptor(remappedEncoderBase, serializer.descriptor, newRootName)
val newRoot = XmlRootDescriptor(newConfig, serializersModule, serializer.descriptor, newRootName)
val newDescriptor = newRoot.getElementDescriptor(0)


xmlEncoderBase.NSAttrXmlEncoder(
remappedEncoderBase.NSAttrXmlEncoder(
newDescriptor,
collectedNamespaces,
-1
Expand Down Expand Up @@ -446,7 +442,7 @@ public class XML constructor(
reader.skipPreamble()

val xmlDecoderBase = XmlDecoderBase(serializersModule, config, reader)
val rootDescriptor = XmlRootDescriptor(xmlDecoderBase, deserializer.descriptor, serialName)
val rootDescriptor = XmlRootDescriptor(config, serializersModule, deserializer.descriptor, serialName)

val elementDescriptor = rootDescriptor.getElementDescriptor(0)
val polyInfo = (elementDescriptor as? XmlPolymorphicDescriptor)?.run {
Expand Down Expand Up @@ -486,8 +482,7 @@ public class XML constructor(
XmlEvent.NamespaceImpl(XMLConstants.DEFAULT_NS_PREFIX, XMLConstants.NULL_NS_URI)
)

val codecBase = XmlEncoderBase(serializersModule, config, XmlStreaming.newWriter(StringWriter(), true))
return XmlRootDescriptor(codecBase, serialDescriptor, serialName)
return XmlRootDescriptor(config, serializersModule, serialDescriptor, serialName)
}

/**
Expand Down Expand Up @@ -659,10 +654,6 @@ public class XML constructor(
return defaultInstance.xmlDescriptor(serializer)
}

private fun xmlDescriptor(serialDescriptor: SerialDescriptor): XmlRootDescriptor {
return defaultInstance.xmlDescriptor(serialDescriptor)
}

/**
* Transform the object into an XML string. This requires the object to be serializable by the kotlin
* serialization library (either it has a built-in serializer or it is [kotlinx.serialization.Serializable].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ internal open class XmlDecoderBase internal constructor(
deserializer: DeserializationStrategy<T>,
previousValue: T?
): T {
val default = (xmlDescriptor as? XmlValueDescriptor)?.defaultValue(deserializer) ?: previousValue
val default = (xmlDescriptor as? XmlValueDescriptor)?.defaultValue(this@XmlDecoderBase, deserializer) ?: previousValue
@Suppress("UNCHECKED_CAST")
return default as T
}
Expand Down
Loading

0 comments on commit 52fb6a4

Please sign in to comment.