From 79d7287d91443cfa8faa98b20fa0f2a5a261f237 Mon Sep 17 00:00:00 2001 From: David Biancolin Date: Fri, 25 Oct 2019 13:26:15 -0700 Subject: Only emit the DeserilizationTypeHintsAnno when needed --- src/main/scala/firrtl/annotations/JsonProtocol.scala | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') 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 -- cgit v1.2.3