From a9c682e4d0a73e59a19ebb41e6e25dc1d6548a11 Mon Sep 17 00:00:00 2001 From: Anatolii Kmetiuk Date: Fri, 19 Aug 2016 22:41:21 +0300 Subject: [PATCH] Bug fix: traits generate methods signatures compatible with concrete implementations (#394) --- .../scala/scalaxb/compiler/xsd/GenSource.scala | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cli/src/main/scala/scalaxb/compiler/xsd/GenSource.scala b/cli/src/main/scala/scalaxb/compiler/xsd/GenSource.scala index 0a1e0e3f9..960ec7cae 100644 --- a/cli/src/main/scala/scalaxb/compiler/xsd/GenSource.scala +++ b/cli/src/main/scala/scalaxb/compiler/xsd/GenSource.scala @@ -135,13 +135,21 @@ class GenSource(val schema: SchemaDecl, // val pkg = packageName(sch, context) // val name = context.typeNames(pkg)(sch) // "import " + pkg.map(_ + ".").getOrElse("") + buildDefaultProtocolName(name) + "._" - // } + // } - def valOrVar = if (config.generateMutable) "var" else "val" + def paramEntries(param: Param): Seq[String] = { + val res = Seq(s"def ${param.toParamName}: ${param.typeName}") + if (!config.generateMutable) res else res :+ { + val base = s"def ${param.toParamName}_=(value: ${param.typeName})" + val impl = s"(implicit evidence: scalaxb.CanWriteXML[${param.typeName}]): Unit" + + if (param.attribute) base + impl else base + } + } val traitCode = { buildComment(decl) }trait {localName}{extendString} {{ { - val vals = for (param <- paramList) yield s"$valOrVar ${param.toTraitScalaCode(false)}" + val vals = paramList.flatMap(paramEntries) vals.mkString(newline + indent(1))} }}