Skip to content

Commit 542832f

Browse files
authored
Respect Config#tagName in Reader.merge and ReadWriter.merge (#619)
Follow up to #579 The `Reader.merge` and `ReadWriter.merge` methods that don't take a `tagKey` param were retained for binary compatibility and updated to pass `Annotator.defaultTagKey` to the corresponding variant that does take a `tagKey`. This updates them to instead respect `Config#tagName`, which defaults to `Annotator.defaultTagKey` but may be overridden by downstream users. I also re-enabled mima checks and updated `mimaPreviousVersions` to just be `4.0.0`, but I'm happy to back out those changes if they're not desirable.
1 parent 0dd0d02 commit 542832f

File tree

8 files changed

+16
-24
lines changed

8 files changed

+16
-24
lines changed

build.sc

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,11 @@ trait CommonPublishModule
4646

4747
def publishVersion = VcsVersion.vcsState().format()
4848
def mimaReportBinaryIssues() =
49-
if (true || this.isInstanceOf[ScalaNativeModule] || this.isInstanceOf[ScalaJSModule]) T.command()
49+
if (this.isInstanceOf[ScalaNativeModule] || this.isInstanceOf[ScalaJSModule]) T.command()
5050
else super.mimaReportBinaryIssues()
5151

5252
def mimaPreviousVersions = Seq(
53-
"3.0.0",
54-
"3.1.0",
55-
"3.1.1",
56-
"3.1.2",
57-
"3.1.3",
58-
"3.1.4",
59-
"3.2.0",
60-
"3.3.0",
61-
"3.3.1",
53+
"4.0.0",
6254
)
6355
def isDotty = crossScalaVersion.startsWith("0") || crossScalaVersion.startsWith("3")
6456
def pomSettings = PomSettings(
@@ -290,7 +282,7 @@ object upickle extends Module{
290282
* Auto-generated picklers and unpicklers, used for creating the 22
291283
* versions of tuple-picklers and case-class picklers
292284
*/
293-
trait Generated extends TupleReadWriters{
285+
trait Generated extends TupleReadWriters { self: upickle.core.Config =>
294286
${tuples.mkString("\n")}
295287
}
296288
""")

upickle/core/src/upickle/core/Types.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import scala.reflect.ClassTag
99
* other internal files can use it, while also mixing it into the `upickle`
1010
* package to form the public API1
1111
*/
12-
trait Types{ types =>
12+
trait Types { types: Config =>
1313

1414
/**
1515
* A combined [[Reader]] and [[Writer]], along with some utility methods.
@@ -39,7 +39,7 @@ trait Types{ types =>
3939
new TaggedReadWriter.Node(tagKey, rws.asInstanceOf[Seq[TaggedReadWriter[T]]]:_*)
4040
}
4141

42-
def merge[T](rws: ReadWriter[_ <: T]*): TaggedReadWriter[T] = merge(Annotator.defaultTagKey, rws:_*)
42+
def merge[T](rws: ReadWriter[_ <: T]*): TaggedReadWriter[T] = merge(tagName, rws:_*)
4343

4444
implicit def join[T](implicit r0: Reader[T], w0: Writer[T]): ReadWriter[T] = (r0, w0) match{
4545
// Make sure we preserve the tagged-ness of the Readers/Writers being
@@ -119,7 +119,7 @@ trait Types{ types =>
119119
new TaggedReader.Node(tagKey, readers0.asInstanceOf[Seq[TaggedReader[T]]]:_*)
120120
}
121121

122-
def merge[T](readers0: Reader[_ <: T]*): TaggedReader.Node[T] = merge(Annotator.defaultTagKey, readers0:_*)
122+
def merge[T](readers0: Reader[_ <: T]*): TaggedReader.Node[T] = merge(tagName, readers0:_*)
123123
}
124124

125125
/**
@@ -164,7 +164,7 @@ trait Types{ types =>
164164
}
165165

166166
trait TaggedReader[T] extends SimpleReader[T]{
167-
private[upickle] def tagKey: String = Annotator.defaultTagKey
167+
private[upickle] def tagKey: String = tagName
168168

169169
def findReader(s: String): Reader[T]
170170

upickle/implicits/src/upickle/implicits/CaseClassReadWriters.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package upickle.implicits
33
import scala.language.experimental.macros
44
import scala.language.higherKinds
55
import scala.reflect.ClassTag
6-
import upickle.core.{Abort, AbortException, ArrVisitor, NoOpVisitor, ObjVisitor, Visitor}
6+
import upickle.core.{Abort, AbortException, ArrVisitor, Config, NoOpVisitor, ObjVisitor, Visitor}
77

88
/**
99
* Basic functionality to be able to read and write objects. Kept as a trait so
1010
* other internal files can use it, while also mixing it into the `upickle`
1111
* package to form the public API1
1212
*/
13-
trait CaseClassReadWriters extends upickle.core.Types{
13+
trait CaseClassReadWriters extends upickle.core.Types { self: Config =>
1414
abstract class CaseClassReader[V] extends SimpleReader[V] {
1515
override def expectedMsg = "expected dictionary"
1616

upickle/implicits/src/upickle/implicits/TupleReadWriters.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package upickle.implicits
33
import scala.language.experimental.macros
44
import scala.language.higherKinds
55
import scala.reflect.ClassTag
6-
import upickle.core.{Visitor, Abort, ArrVisitor, ObjVisitor, NoOpVisitor}
6+
import upickle.core.{Visitor, Abort, ArrVisitor, Config, ObjVisitor, NoOpVisitor}
77

88
/**
99
* Basic functionality to be able to read and write objects. Kept as a trait so
1010
* other internal files can use it, while also mixing it into the `upickle`
1111
* package to form the public API1
1212
*/
13-
trait TupleReadWriters extends upickle.core.Types{
13+
trait TupleReadWriters extends upickle.core.Types { self: Config =>
1414

1515

1616
class TupleNWriter[V](val writers: Array[Writer[_]], val f: V => Array[Any]) extends Writer[V]{

upickle/implicits/src/upickle/implicits/Writers.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package upickle.implicits
22

33
import java.util.UUID
44

5-
import upickle.core.{ Visitor, Annotator }
5+
import upickle.core.{ Config, Visitor, Annotator }
66

77
import scala.concurrent.duration.{Duration, FiniteDuration}
88
import scala.language.higherKinds
@@ -240,7 +240,7 @@ trait Writers extends upickle.core.Types
240240
/**
241241
* This needs to be split into a separate trait due to https://github.com/scala/bug/issues/11768
242242
*/
243-
trait LowPriWriters extends upickle.core.Types{
243+
trait LowPriWriters extends upickle.core.Types { self: Config =>
244244
implicit def SeqLikeWriter[C[_] <: Iterable[_], T](implicit r: Writer[T]): Writer[C[T]] = new Writer[C[T]] {
245245
def write0[R](out: Visitor[_, R], v: C[T]): R = {
246246
val ctx = out.visitArray(v.size, -1).narrow

upickle/src-js/upickle/WebJson.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package upickle
22

33
import scala.scalajs.js
44

5-
trait WebJson extends upickle.core.Types {
5+
trait WebJson extends upickle.core.Types { self: upickle.core.Config =>
66
object web {
77
def read[T: Reader](s: String) = {
88
ujson.WebJson.transform(js.JSON.parse(s), implicitly[Reader[T]])
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package upickle
22

33

4-
trait WebJson extends upickle.core.Types {
4+
trait WebJson extends upickle.core.Types { self: upickle.core.Config =>
55

66
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package upickle
22

3-
trait WebJson extends upickle.core.Types {
3+
trait WebJson extends upickle.core.Types { self: upickle.core.Config =>
44

55
}

0 commit comments

Comments
 (0)