diff options
| author | David Biancolin | 2019-10-25 13:26:15 -0700 |
|---|---|---|
| committer | David Biancolin | 2019-10-25 13:26:15 -0700 |
| commit | 79d7287d91443cfa8faa98b20fa0f2a5a261f237 (patch) | |
| tree | f664e91b6e7783674e5d7e3db2f9533ddeecbef7 | |
| parent | f6db9d4bd6156bb8af7dfdbcced20cd6a098920f (diff) | |
Only emit the DeserilizationTypeHintsAnno when needed
| -rw-r--r-- | src/main/scala/firrtl/annotations/JsonProtocol.scala | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/main/scala/firrtl/annotations/JsonProtocol.scala b/src/main/scala/firrtl/annotations/JsonProtocol.scala index 9fe575c7..db366395 100644 --- a/src/main/scala/firrtl/annotations/JsonProtocol.scala +++ b/src/main/scala/firrtl/annotations/JsonProtocol.scala @@ -101,13 +101,18 @@ object JsonProtocol { def serialize(annos: Seq[Annotation]): String = serializeTry(annos).get def serializeTry(annos: Seq[Annotation]): Try[String] = { - val tags = annos.flatMap({ - case anno: HasSerializationHints => anno.getClass +: anno.typeHints - case other => Seq(other.getClass) - }).distinct + val annotationTags = annos.map(_.getClass).distinct + val additionalTags = annos.collect({ + case anno: HasSerializationHints => anno.typeHints + }).flatten.distinct + + val typeHintAnno = additionalTags match { + case Nil => None + case tags => Some(DeserializationTypeHintsAnnotation(tags.map(_.getName))) + } - implicit val formats = jsonFormat(classOf[DeserializationTypeHintsAnnotation] +: tags) - Try(writePretty(DeserializationTypeHintsAnnotation(tags.map(_.getName)) +: annos)) + implicit val formats = jsonFormat(classOf[DeserializationTypeHintsAnnotation] +: (annotationTags ++ additionalTags)) + Try(writePretty(typeHintAnno ++ annos)) } def deserialize(in: JsonInput): Seq[Annotation] = deserializeTry(in).get |
