From d59398e4406d5432d97855fa157a1ed04386dbf2 Mon Sep 17 00:00:00 2001 From: Leonid Dubinsky Date: Fri, 16 Jun 2023 00:11:17 -0400 Subject: [PATCH] Use string interpolation instead of concatenation or format(). It looks like the code predates the introduction of the string interpolation... (I'd like to replace more uses of the StringBuilder with string interpolation, but binary compatibility is in the way.) --- .../scala-2.x/scala/xml/CompilerErrors.scala | 4 +-- shared/src/main/scala/scala/xml/Atom.scala | 2 +- .../src/main/scala/scala/xml/Attribute.scala | 4 +-- shared/src/main/scala/scala/xml/Comment.scala | 4 +-- .../src/main/scala/scala/xml/EntityRef.scala | 2 +- shared/src/main/scala/scala/xml/Group.scala | 2 +- .../src/main/scala/scala/xml/MetaData.scala | 2 +- .../scala/scala/xml/NamespaceBinding.scala | 8 ++--- shared/src/main/scala/scala/xml/Node.scala | 9 ++---- shared/src/main/scala/scala/xml/NodeSeq.scala | 2 +- shared/src/main/scala/scala/xml/Null.scala | 2 +- shared/src/main/scala/scala/xml/PCData.scala | 6 ++-- .../src/main/scala/scala/xml/ProcInstr.scala | 12 ++++---- shared/src/main/scala/scala/xml/Utility.scala | 15 +++++----- shared/src/main/scala/scala/xml/XML.scala | 4 +-- .../scala/scala/xml/dtd/ContentModel.scala | 2 +- shared/src/main/scala/scala/xml/dtd/DTD.scala | 5 +--- .../src/main/scala/scala/xml/dtd/Decl.scala | 25 +++++++--------- .../main/scala/scala/xml/dtd/DocType.scala | 4 +-- .../main/scala/scala/xml/dtd/ExternalID.scala | 13 ++++---- .../scala/xml/dtd/ValidationException.scala | 11 ++++--- .../scala/xml/dtd/impl/BaseBerrySethi.scala | 6 ++-- .../scala/xml/dtd/impl/DetWordAutom.scala | 10 ++----- .../scala/xml/dtd/impl/NondetWordAutom.scala | 5 ++-- .../xml/include/sax/XIncludeFilter.scala | 30 ++++++++----------- .../scala/xml/include/sax/XIncluder.scala | 26 +++++++--------- .../scala/xml/parsing/ExternalSources.scala | 2 +- .../scala/xml/parsing/FactoryAdapter.scala | 4 +-- .../scala/xml/parsing/MarkupHandler.scala | 6 ++-- .../scala/xml/parsing/MarkupParser.scala | 12 ++++---- .../xml/parsing/MarkupParserCommon.scala | 8 ++--- .../scala/xml/TransformersTest.scala | 2 +- shared/src/test/scala/scala/xml/XMLTest.scala | 4 ++- 33 files changed, 112 insertions(+), 141 deletions(-) diff --git a/jvm/src/test/scala-2.x/scala/xml/CompilerErrors.scala b/jvm/src/test/scala-2.x/scala/xml/CompilerErrors.scala index 2ad3a329..9a0df05d 100644 --- a/jvm/src/test/scala-2.x/scala/xml/CompilerErrors.scala +++ b/jvm/src/test/scala-2.x/scala/xml/CompilerErrors.scala @@ -193,7 +193,7 @@ class CompilerTesting { // note: `code` should have a | margin // the import's needed because toolbox compiler does not accumulate imports like the real one (TODO: verify hypothesis) def xmlErrorMessages(msg: String, code: String): List[String] = - errorMessages(msg)("import scala.xml.{TopScope => $scope}\n"+ code.stripMargin) + errorMessages(msg)("import scala.xml.{TopScope => $scope}\n"+ code.stripMargin) // TODO what is this $scope? def expectXmlError(msg: String, code: String): Unit = { val errors: List[String] = xmlErrorMessages(msg, code) @@ -203,6 +203,6 @@ class CompilerTesting { def expectXmlErrors(msgCount: Int, msg: String, code: String): Unit = { val errors: List[String] = xmlErrorMessages(msg, code) val errorCount: Int = errors.count(_.contains(msg)) - assert(errorCount == msgCount, s"$errorCount occurrences of \'$msg\' found -- expected $msgCount in:\n${errors.mkString("\n")}") + assert(errorCount == msgCount, s"$errorCount occurrences of '$msg' found -- expected $msgCount in:\n${errors.mkString("\n")}") } } diff --git a/shared/src/main/scala/scala/xml/Atom.scala b/shared/src/main/scala/scala/xml/Atom.scala index d79ce287..d2e1c23d 100644 --- a/shared/src/main/scala/scala/xml/Atom.scala +++ b/shared/src/main/scala/scala/xml/Atom.scala @@ -24,7 +24,7 @@ import scala.collection.Seq */ class Atom[+A](val data: A) extends SpecialNode with Serializable { if (data == null) - throw new IllegalArgumentException("cannot construct " + getClass.getSimpleName + " with null") + throw new IllegalArgumentException(s"cannot construct ${getClass.getSimpleName} with null") override protected def basisForHashCode: Seq[Any] = Seq(data) diff --git a/shared/src/main/scala/scala/xml/Attribute.scala b/shared/src/main/scala/scala/xml/Attribute.scala index 9d2be60d..cb2b2d97 100644 --- a/shared/src/main/scala/scala/xml/Attribute.scala +++ b/shared/src/main/scala/scala/xml/Attribute.scala @@ -98,9 +98,9 @@ trait Attribute extends MetaData { if (value == null) return if (isPrefixed) - sb.append(pre).append(':') + sb.append(s"$pre:") - sb.append(key).append('=') + sb.append(s"$key=") val sb2: StringBuilder = new StringBuilder() Utility.sequenceToXML(value, TopScope, sb2, stripComments = true) Utility.appendQuoted(sb2.toString, sb) diff --git a/shared/src/main/scala/scala/xml/Comment.scala b/shared/src/main/scala/scala/xml/Comment.scala index 76d1be4a..aee8dc07 100644 --- a/shared/src/main/scala/scala/xml/Comment.scala +++ b/shared/src/main/scala/scala/xml/Comment.scala @@ -30,7 +30,7 @@ case class Comment(commentText: String) extends SpecialNode { final override def doTransform: Boolean = false if (commentText.contains("--")) { - throw new IllegalArgumentException("text contains \"--\"") + throw new IllegalArgumentException(s"""text contains "--"""") } if (commentText.nonEmpty && commentText.charAt(commentText.length - 1) == '-') { throw new IllegalArgumentException("The final character of a XML comment may not be '-'. See https://www.w3.org/TR/xml11//#IDA5CES") @@ -40,5 +40,5 @@ case class Comment(commentText: String) extends SpecialNode { * Appends "" to this string buffer. */ override def buildString(sb: StringBuilder): StringBuilder = - sb.append("") + sb.append(s"") } diff --git a/shared/src/main/scala/scala/xml/EntityRef.scala b/shared/src/main/scala/scala/xml/EntityRef.scala index 07be3c5a..5b5b1f2a 100644 --- a/shared/src/main/scala/scala/xml/EntityRef.scala +++ b/shared/src/main/scala/scala/xml/EntityRef.scala @@ -41,5 +41,5 @@ case class EntityRef(entityName: String) extends SpecialNode { * @return the modified string buffer `sb`. */ override def buildString(sb: StringBuilder): StringBuilder = - sb.append("&").append(entityName).append(";") + sb.append(s"&$entityName;") } diff --git a/shared/src/main/scala/scala/xml/Group.scala b/shared/src/main/scala/scala/xml/Group.scala index b212899a..4c8fd7ba 100644 --- a/shared/src/main/scala/scala/xml/Group.scala +++ b/shared/src/main/scala/scala/xml/Group.scala @@ -40,7 +40,7 @@ final case class Group(nodes: Seq[Node]) extends Node { * Since Group is very much a hack it throws an exception if you * try to do anything with it. */ - private def fail(msg: String): Nothing = throw new UnsupportedOperationException("class Group does not support method '%s'".format(msg)) + private def fail(msg: String): Nothing = throw new UnsupportedOperationException(s"class Group does not support method '$msg'") override def label: Nothing = fail("label") override def attributes: Nothing = fail("attributes") diff --git a/shared/src/main/scala/scala/xml/MetaData.scala b/shared/src/main/scala/scala/xml/MetaData.scala index 9d621aa5..b55b3187 100644 --- a/shared/src/main/scala/scala/xml/MetaData.scala +++ b/shared/src/main/scala/scala/xml/MetaData.scala @@ -174,7 +174,7 @@ abstract class MetaData * prefixed, and "key" otherwise. */ def prefixedKey: String = this match { - case x: Attribute if x.isPrefixed => x.pre + ":" + key + case x: Attribute if x.isPrefixed => s"${x.pre}:$key" case _ => key } diff --git a/shared/src/main/scala/scala/xml/NamespaceBinding.scala b/shared/src/main/scala/scala/xml/NamespaceBinding.scala index 6ddeb99c..7e851eda 100644 --- a/shared/src/main/scala/scala/xml/NamespaceBinding.scala +++ b/shared/src/main/scala/scala/xml/NamespaceBinding.scala @@ -79,10 +79,8 @@ case class NamespaceBinding(prefix: String, uri: String, parent: NamespaceBindin private def doBuildString(sb: StringBuilder, stop: NamespaceBinding): Unit = { if (List(null, stop, TopScope).contains(this)) return - val s: String = " xmlns%s=\"%s\"".format( - if (prefix != null) ":" + prefix else "", - if (uri != null) uri else "" - ) - parent.doBuildString(sb.append(s), stop) // copy(ignore) + val prefixStr: String = if (prefix != null) s":$prefix" else "" + val uriStr: String = if (uri != null) uri else "" + parent.doBuildString(sb.append(s""" xmlns$prefixStr="$uriStr""""), stop) // copy(ignore) } } diff --git a/shared/src/main/scala/scala/xml/Node.scala b/shared/src/main/scala/scala/xml/Node.scala index ee7a9f50..ff719ec4 100755 --- a/shared/src/main/scala/scala/xml/Node.scala +++ b/shared/src/main/scala/scala/xml/Node.scala @@ -184,13 +184,8 @@ abstract class Node extends NodeSeq { /** * Appends qualified name of this node to `StringBuilder`. */ - def nameToString(sb: StringBuilder): StringBuilder = { - if (null != prefix) { - sb.append(prefix) - sb.append(':') - } - sb.append(label) - } + def nameToString(sb: StringBuilder): StringBuilder = + sb.append(s"${if (prefix == null) "" else s"$prefix:"}$label") /** * Returns a type symbol (e.g. DTD, XSD), default `'''null'''`. diff --git a/shared/src/main/scala/scala/xml/NodeSeq.scala b/shared/src/main/scala/scala/xml/NodeSeq.scala index 26880d26..cbb5b047 100644 --- a/shared/src/main/scala/scala/xml/NodeSeq.scala +++ b/shared/src/main/scala/scala/xml/NodeSeq.scala @@ -157,7 +157,7 @@ abstract class NodeSeq extends AbstractSeq[Node] with immutable.Seq[Node] with S * Convenience method which returns string text of the named attribute. Use: * - `that \@ "foo"` to get the string text of attribute `"foo"`; */ - def \@(attributeName: String): String = (this \ ("@" + attributeName)).text + def \@(attributeName: String): String = (this \ s"@$attributeName").text override def toString: String = theSeq.mkString diff --git a/shared/src/main/scala/scala/xml/Null.scala b/shared/src/main/scala/scala/xml/Null.scala index 0ece843a..5613a462 100644 --- a/shared/src/main/scala/scala/xml/Null.scala +++ b/shared/src/main/scala/scala/xml/Null.scala @@ -51,7 +51,7 @@ case object Null extends MetaData { override def apply(namespace: String, scope: NamespaceBinding, key: String): ScalaVersionSpecificReturnTypes.NullApply3 = null override def apply(key: String): ScalaVersionSpecificReturnTypes.NullApply1 = if (Utility.isNameStart(key.head)) null - else throw new IllegalArgumentException("not a valid attribute name '" + key + "', so can never match !") + else throw new IllegalArgumentException(s"not a valid attribute name '$key', so can never match !") override protected def toString1(sb: StringBuilder): Unit = () override protected def toString1: String = "" diff --git a/shared/src/main/scala/scala/xml/PCData.scala b/shared/src/main/scala/scala/xml/PCData.scala index c5da01d7..ee91aa24 100644 --- a/shared/src/main/scala/scala/xml/PCData.scala +++ b/shared/src/main/scala/scala/xml/PCData.scala @@ -30,8 +30,10 @@ class PCData(data: String) extends Atom[String](data) { * @param sb the input string buffer associated to some XML element * @return the input string buffer with the formatted CDATA section */ - override def buildString(sb: StringBuilder): StringBuilder = - sb.append("".format(data.replaceAll("]]>", "]]]]>"))) + override def buildString(sb: StringBuilder): StringBuilder = { + val dataStr: String = data.replaceAll("]]>", "]]]]>") + sb.append(s"") + } } /** diff --git a/shared/src/main/scala/scala/xml/ProcInstr.scala b/shared/src/main/scala/scala/xml/ProcInstr.scala index b2433ec8..4d09b373 100644 --- a/shared/src/main/scala/scala/xml/ProcInstr.scala +++ b/shared/src/main/scala/scala/xml/ProcInstr.scala @@ -23,11 +23,11 @@ package xml // Note: used by the Scala compiler. case class ProcInstr(target: String, proctext: String) extends SpecialNode { if (!Utility.isName(target)) - throw new IllegalArgumentException(target + " must be an XML Name") + throw new IllegalArgumentException(s"$target must be an XML Name") if (proctext.contains("?>")) - throw new IllegalArgumentException(proctext + " may not contain \"?>\"") + throw new IllegalArgumentException(s"""$proctext may not contain "?>"""") if (target.toLowerCase == "xml") - throw new IllegalArgumentException(target + " is reserved") + throw new IllegalArgumentException(s"$target is reserved") final override def doCollectNamespaces: Boolean = false final override def doTransform: Boolean = false @@ -39,6 +39,8 @@ case class ProcInstr(target: String, proctext: String) extends SpecialNode { * appends "<?" target (" "+text)?+"?>" * to this stringbuffer. */ - override def buildString(sb: StringBuilder): StringBuilder = - sb.append("".format(target, if (proctext == "") "" else " " + proctext)) + override def buildString(sb: StringBuilder): StringBuilder = { + val textStr: String = if (proctext == "") "" else s" $proctext" + sb.append(s"") + } } diff --git a/shared/src/main/scala/scala/xml/Utility.scala b/shared/src/main/scala/scala/xml/Utility.scala index bc6b02a8..ab3592f2 100755 --- a/shared/src/main/scala/scala/xml/Utility.scala +++ b/shared/src/main/scala/scala/xml/Utility.scala @@ -112,7 +112,7 @@ object Utility extends AnyRef with parsing.TokenTests { "quot" -> '"', "apos" -> '\'' ) - val escMap: Map[Char, String] = (pairs - "apos").map { case (s, c) => c -> "&%s;".format(s) } + val escMap: Map[Char, String] = (pairs - "apos").map { case (s, c) => c -> s"&$s;" } val unescMap: Map[String, Char] = pairs } import Escapes.{ escMap, unescMap } @@ -265,7 +265,7 @@ object Utility extends AnyRef with parsing.TokenTests { val csp = e.child.forall(isAtomAndNotText) ser(e.child.toList :: ns :: r, e.scope :: pscopes, csp :: spaced, e :: toClose) } - case n => throw new IllegalArgumentException("Don't know how to serialize a " + n.getClass.getName) + case n => throw new IllegalArgumentException(s"Don't know how to serialize a ${n.getClass.getName}") } } ser(List(ns.toList), List(pscope), List(spaced), Nil) @@ -309,7 +309,7 @@ object Utility extends AnyRef with parsing.TokenTests { */ def appendQuoted(s: String, sb: StringBuilder): StringBuilder = { val ch: Char = if (s.contains('"')) '\'' else '"' - sb.append(ch).append(s).append(ch) + sb.append(s"$ch$s$ch") } /** @@ -347,10 +347,10 @@ object Utility extends AnyRef with parsing.TokenTests { case '&' => val n: String = getName(value, i + 1) if (n.eq(null)) - return "malformed entity reference in attribute value [" + value + "]" + return s"malformed entity reference in attribute value [$value]" i = i + n.length + 1 if (i >= value.length || value.charAt(i) != ';') - return "malformed entity reference in attribute value [" + value + "]" + return s"malformed entity reference in attribute value [$value]" case _ => } i = i + 1 @@ -423,14 +423,13 @@ object Utility extends AnyRef with parsing.TokenTests { case 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' => if (!hex) - reportSyntaxError("hex char not allowed in decimal char ref\n" + - "Did you mean to write &#x ?") + reportSyntaxError("hex char not allowed in decimal char ref\nDid you mean to write &#x ?") else i = i * base + ch().asDigit case SU => reportTruncatedError("") case _ => - reportSyntaxError("character '" + ch() + "' not allowed in char ref\n") + reportSyntaxError(s"character '${ch()}' not allowed in char ref\n") } nextch() } diff --git a/shared/src/main/scala/scala/xml/XML.scala b/shared/src/main/scala/scala/xml/XML.scala index 43135acf..9cf06d13 100755 --- a/shared/src/main/scala/scala/xml/XML.scala +++ b/shared/src/main/scala/scala/xml/XML.scala @@ -125,8 +125,8 @@ object XML extends XMLLoader[Elem] { minimizeTags: MinimizeMode.Value = MinimizeMode.Default ): Unit = { /* TODO: optimize by giving writer parameter to toXML*/ - if (xmlDecl) w.write("\n") - if (doctype.ne(null)) w.write(doctype.toString + "\n") + if (xmlDecl) w.write(s"\n") + if (doctype.ne(null)) w.write(s"$doctype\n") w.write(Utility.serialize(node, minimizeTags = minimizeTags).toString) } } diff --git a/shared/src/main/scala/scala/xml/dtd/ContentModel.scala b/shared/src/main/scala/scala/xml/dtd/ContentModel.scala index b626bbf4..1c6b0a00 100644 --- a/shared/src/main/scala/scala/xml/dtd/ContentModel.scala +++ b/shared/src/main/scala/scala/xml/dtd/ContentModel.scala @@ -38,7 +38,7 @@ object ContentModel extends WordExp { } case class ElemName(name: String) extends Label { - override def toString: String = """ElemName("%s")""".format(name) + override def toString: String = s"""ElemName("$name")""" } def isMixed(cm: ContentModel): Boolean = cond(cm) { case _: MIXED => true } diff --git a/shared/src/main/scala/scala/xml/dtd/DTD.scala b/shared/src/main/scala/scala/xml/dtd/DTD.scala index a3f588ec..9b334a8d 100644 --- a/shared/src/main/scala/scala/xml/dtd/DTD.scala +++ b/shared/src/main/scala/scala/xml/dtd/DTD.scala @@ -33,8 +33,5 @@ abstract class DTD { var ent: mutable.Map[String, EntityDecl] = new mutable.HashMap[String, EntityDecl]() override def toString: String = - "DTD %s [\n%s]".format( - Option(externalID).getOrElse(""), - decls.mkString("", "\n", "\n") - ) + s"DTD ${Option(externalID).getOrElse("")} [\n${decls.mkString("\n")}\n]" } diff --git a/shared/src/main/scala/scala/xml/dtd/Decl.scala b/shared/src/main/scala/scala/xml/dtd/Decl.scala index bdde0337..570669dc 100644 --- a/shared/src/main/scala/scala/xml/dtd/Decl.scala +++ b/shared/src/main/scala/scala/xml/dtd/Decl.scala @@ -40,8 +40,7 @@ sealed abstract class MarkupDecl extends Decl { case class ElemDecl(name: String, contentModel: ContentModel) extends MarkupDecl { override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("') } @@ -49,9 +48,8 @@ case class ElemDecl(name: String, contentModel: ContentModel) case class AttListDecl(name: String, attrs: List[AttrDecl]) extends MarkupDecl { - override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("")) - } + override def buildString(sb: StringBuilder): StringBuilder = + sb.append(s"") } /** @@ -63,10 +61,9 @@ case class AttrDecl(name: String, tpe: String, default: DefaultDecl) { override def toString: String = sbToString(buildString) def buildString(sb: StringBuilder): StringBuilder = { - sb.append(" ").append(name).append(' ').append(tpe).append(' ') + sb.append(s" $name $tpe ") default.buildString(sb) } - } /** an entity declaration */ @@ -75,7 +72,7 @@ sealed abstract class EntityDecl extends MarkupDecl /** a parsed general entity declaration */ case class ParsedEntityDecl(name: String, entdef: EntityDef) extends EntityDecl { override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("') } } @@ -83,7 +80,7 @@ case class ParsedEntityDecl(name: String, entdef: EntityDef) extends EntityDecl /** a parameter entity declaration */ case class ParameterEntityDecl(name: String, entdef: EntityDef) extends EntityDecl { override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("') } } @@ -91,15 +88,15 @@ case class ParameterEntityDecl(name: String, entdef: EntityDef) extends EntityDe /** an unparsed entity declaration */ case class UnparsedEntityDecl(name: String, extID: ExternalID, notation: String) extends EntityDecl { override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("') + sb.append(s"") } } /** a notation declaration */ case class NotationDecl(name: String, extID: ExternalID) extends MarkupDecl { override def buildString(sb: StringBuilder): StringBuilder = { - sb.append("') } } @@ -120,7 +117,7 @@ case class IntDef(value: String) extends EntityDef { val n: String = tmp.substring(ix, iz) if (!Utility.isName(n)) - throw new IllegalArgumentException("internal entity def: \"" + n + "\" must be an XML Name") + throw new IllegalArgumentException(s"""internal entity def: "$n" must be an XML Name""") tmp = tmp.substring(iz + 1, tmp.length) ix = tmp.indexOf('%') @@ -145,7 +142,7 @@ case class PEReference(ent: String) extends MarkupDecl { throw new IllegalArgumentException("ent must be an XML Name") override def buildString(sb: StringBuilder): StringBuilder = - sb.append('%').append(ent).append(';') + sb.append(s"%$ent;") } // default declarations for attributes diff --git a/shared/src/main/scala/scala/xml/dtd/DocType.scala b/shared/src/main/scala/scala/xml/dtd/DocType.scala index efdfcf83..1318e3b2 100644 --- a/shared/src/main/scala/scala/xml/dtd/DocType.scala +++ b/shared/src/main/scala/scala/xml/dtd/DocType.scala @@ -27,7 +27,7 @@ import scala.collection.Seq */ case class DocType(name: String, extID: ExternalID, intSubset: Seq[dtd.Decl]) { if (!Utility.isName(name)) - throw new IllegalArgumentException(name + " must be an XML Name") + throw new IllegalArgumentException(s"$name must be an XML Name") /** returns "<!DOCTYPE + name + extID? + ("["+intSubSet+"]")? >" */ final override def toString: String = { @@ -35,7 +35,7 @@ case class DocType(name: String, extID: ExternalID, intSubset: Seq[dtd.Decl]) { if (intSubset.isEmpty) "" else intSubset.mkString("[", "", "]") - """""".format(name, extID.toString, intString) + s"" } } diff --git a/shared/src/main/scala/scala/xml/dtd/ExternalID.scala b/shared/src/main/scala/scala/xml/dtd/ExternalID.scala index f2a5d40f..80b9da86 100644 --- a/shared/src/main/scala/scala/xml/dtd/ExternalID.scala +++ b/shared/src/main/scala/scala/xml/dtd/ExternalID.scala @@ -22,19 +22,16 @@ package dtd sealed abstract class ExternalID extends parsing.TokenTests { def quoted(s: String): String = { val c: Char = if (s.contains('"')) '\'' else '"' - c.toString + s + c + s"$c$s$c" } // public != null: PUBLIC " " publicLiteral " " [systemLiteral] // public == null: SYSTEM " " systemLiteral - override def toString: String = { - lazy val quotedSystemLiteral: String = quoted(systemId) - lazy val quotedPublicLiteral: String = quoted(publicId) + override def toString: String = + if (publicId == null) s"SYSTEM ${quoted(systemId)}" else + if (systemId == null) s"PUBLIC ${quoted(publicId)}" else + s"PUBLIC ${quoted(publicId)} ${quoted(systemId)}" - if (publicId == null) "SYSTEM " + quotedSystemLiteral - else "PUBLIC " + quotedPublicLiteral + - (if (systemId == null) "" else " " + quotedSystemLiteral) - } def buildString(sb: StringBuilder): StringBuilder = sb.append(this.toString) diff --git a/shared/src/main/scala/scala/xml/dtd/ValidationException.scala b/shared/src/main/scala/scala/xml/dtd/ValidationException.scala index 71f741d8..01d4cad0 100644 --- a/shared/src/main/scala/scala/xml/dtd/ValidationException.scala +++ b/shared/src/main/scala/scala/xml/dtd/ValidationException.scala @@ -21,25 +21,24 @@ case class ValidationException(e: String) extends Exception(e) */ object MakeValidationException { def fromFixedAttribute(k: String, value: String, actual: String): ValidationException = - ValidationException("value of attribute " + k + " FIXED to \"" + - value + "\", but document tries \"" + actual + "\"") + ValidationException(s"""value of attribute $k FIXED to "$value", but document tries "$actual"""") def fromNonEmptyElement(): ValidationException = ValidationException("element should be *empty*") def fromUndefinedElement(label: String): ValidationException = - ValidationException("element \"" + label + "\" not allowed here") + ValidationException(s"""element "$label" not allowed here""") def fromUndefinedAttribute(key: String): ValidationException = - ValidationException("attribute " + key + " not allowed here") + ValidationException(s"attribute $key not allowed here") def fromMissingAttribute(allKeys: Set[String]): ValidationException = { val sb: StringBuilder = new StringBuilder("missing value for REQUIRED attribute") if (allKeys.size > 1) sb.append('s') - allKeys.foreach(k => sb.append("'%s'".format(k))) + allKeys.foreach(k => sb.append(s"'$k'")) ValidationException(sb.toString) } def fromMissingAttribute(key: String, tpe: String): ValidationException = - ValidationException("missing value for REQUIRED attribute %s of type %s".format(key, tpe)) + ValidationException(s"missing value for REQUIRED attribute $key of type $tpe") } diff --git a/shared/src/main/scala/scala/xml/dtd/impl/BaseBerrySethi.scala b/shared/src/main/scala/scala/xml/dtd/impl/BaseBerrySethi.scala index 6a055bf8..267277e0 100644 --- a/shared/src/main/scala/scala/xml/dtd/impl/BaseBerrySethi.scala +++ b/shared/src/main/scala/scala/xml/dtd/impl/BaseBerrySethi.scala @@ -49,7 +49,7 @@ private[dtd] abstract class BaseBerrySethi { val (l1: Seq[lang._regexpT], l2: Seq[lang._regexpT]) = x.rs.span(_.isNullable) (l1 ++ l2.take(1)).map(compFunction).foldLeft(emptySet)(_ ++ _) case Star(t) => compFunction(t) - case _ => throw new IllegalArgumentException("unexpected pattern " + r.getClass) + case _ => throw new IllegalArgumentException(s"unexpected pattern ${r.getClass}") } /** Computes `first(r)` for the word regexp `r`. */ @@ -90,7 +90,7 @@ private[dtd] abstract class BaseBerrySethi { if (p.isNullable) fol ++ first else first } - case _ => throw new IllegalArgumentException("unexpected pattern: " + r.getClass) + case _ => throw new IllegalArgumentException(s"unexpected pattern: ${r.getClass}") } /** @@ -102,6 +102,6 @@ private[dtd] abstract class BaseBerrySethi { case x: Sequ => x.rs.foreach(traverse) case x: Meta => traverse(x.r) case Star(t) => traverse(t) - case _ => throw new IllegalArgumentException("unexp pattern " + r.getClass) + case _ => throw new IllegalArgumentException(s"unexp pattern ${r.getClass}") } } diff --git a/shared/src/main/scala/scala/xml/dtd/impl/DetWordAutom.scala b/shared/src/main/scala/scala/xml/dtd/impl/DetWordAutom.scala index 5eb98603..94402451 100644 --- a/shared/src/main/scala/scala/xml/dtd/impl/DetWordAutom.scala +++ b/shared/src/main/scala/scala/xml/dtd/impl/DetWordAutom.scala @@ -35,17 +35,13 @@ private[dtd] abstract class DetWordAutom[T <: AnyRef] { def next(q: Int, label: T): Int = delta(q).getOrElse(label, default(q)) override def toString: String = { - val sb: StringBuilder = new StringBuilder("[DetWordAutom nstates=") - sb.append(nstates) - sb.append(" finals=") val map: Map[Int, Int] = finals.zipWithIndex.map(_.swap).toMap - sb.append(map.toString) - sb.append(" delta=\n") + val sb: StringBuilder = new StringBuilder(s"[DetWordAutom nstates=$nstates finals=$map delta=\n") for (i <- 0.until(nstates)) { - sb.append("%d->%s\n".format(i, delta(i))) + sb.append(s"$i->${delta(i)}\n") if (i < default.length) - sb.append("_>%s\n".format(default(i))) + sb.append(s"_>${default(i)}\n") } sb.toString } diff --git a/shared/src/main/scala/scala/xml/dtd/impl/NondetWordAutom.scala b/shared/src/main/scala/scala/xml/dtd/impl/NondetWordAutom.scala index afa6c8ab..1bfefcc3 100644 --- a/shared/src/main/scala/scala/xml/dtd/impl/NondetWordAutom.scala +++ b/shared/src/main/scala/scala/xml/dtd/impl/NondetWordAutom.scala @@ -56,11 +56,10 @@ private[dtd] abstract class NondetWordAutom[T <: AnyRef] { private def finalStates: immutable.Seq[Int] = 0.until(nstates).filter(isFinal) override def toString: String = { - val finalString: String = Map(finalStates.map(j => j -> finals(j)): _*).toString val deltaString: String = 0.until(nstates) - .map(i => " %d->%s\n _>%s\n".format(i, delta(i), default(i))).mkString + .map(i => s" $i->${delta(i)}\n _>${default(i)}\n").mkString - "[NondetWordAutom nstates=%d finals=%s delta=\n%s".format(nstates, finalString, deltaString) + s"[NondetWordAutom nstates=$nstates finals=$finalString delta=\n$deltaString" } } diff --git a/shared/src/main/scala/scala/xml/include/sax/XIncludeFilter.scala b/shared/src/main/scala/scala/xml/include/sax/XIncludeFilter.scala index 0b8ab37c..9c70136b 100644 --- a/shared/src/main/scala/scala/xml/include/sax/XIncludeFilter.scala +++ b/shared/src/main/scala/scala/xml/include/sax/XIncludeFilter.scala @@ -95,7 +95,7 @@ class XIncludeFilter extends XMLFilterImpl { bases.push(new URL(base)) } catch { case _: MalformedURLException => - throw new UnsupportedOperationException("Unrecognized SYSTEM ID: " + base) + throw new UnsupportedOperationException(s"Unrecognized SYSTEM ID: $base") } super.setDocumentLocator(locator) } @@ -129,8 +129,7 @@ class XIncludeFilter extends XMLFilterImpl { currentBase = new URL(parentBase, base) } catch { case e: MalformedURLException => - throw new SAXException("Malformed base URL: " - + currentBase, e) + throw new SAXException(s"Malformed base URL: $currentBase", e) } } bases push currentBase @@ -154,7 +153,7 @@ class XIncludeFilter extends XMLFilterImpl { } // Need to check this also in DOM and JDOM???? else { throw new SAXException( - "Illegal value for parse attribute: " + parse) + s"Illegal value for parse attribute: $parse") } level += 1 } else { @@ -235,9 +234,7 @@ class XIncludeFilter extends XMLFilterImpl { line = locator.getLineNumber column = locator.getColumnNumber } - locationString = (" in document included from " + publicID - + " at " + systemID - + " at line " + line + ", column " + column) + locationString = s" in document included from $publicID at $systemID at line $line, column $column" locationString } @@ -263,10 +260,9 @@ class XIncludeFilter extends XMLFilterImpl { source = new URL(base, url) } catch { case e: MalformedURLException => - val ex: UnavailableResourceException = new UnavailableResourceException("Unresolvable URL " + url - + getLocation) + val ex: UnavailableResourceException = new UnavailableResourceException(s"Unresolvable URL $url$getLocation") ex.setRootCause(e) - throw new SAXException("Unresolvable URL " + url + getLocation, ex) + throw new SAXException(s"Unresolvable URL $url$getLocation", ex) } try { @@ -299,11 +295,9 @@ class XIncludeFilter extends XMLFilterImpl { } ; charsRead != -1}) () } catch { case e: UnsupportedEncodingException => - throw new SAXException("Unsupported encoding: " - + encoding + getLocation, e) + throw new SAXException(s"Unsupported encoding: $encoding$getLocation", e) case e: IOException => - throw new SAXException("Document not found: " - + source.toExternalForm + getLocation, e) + throw new SAXException(s"Document not found: ${source.toExternalForm}$getLocation", e) } } @@ -324,9 +318,9 @@ class XIncludeFilter extends XMLFilterImpl { try new URL(bases.peek, url) catch { case e: MalformedURLException => - val ex: UnavailableResourceException = new UnavailableResourceException("Unresolvable URL " + url + getLocation) + val ex: UnavailableResourceException = new UnavailableResourceException(s"Unresolvable URL $url$getLocation") ex setRootCause e - throw new SAXException("Unresolvable URL " + url + getLocation, ex) + throw new SAXException(s"Unresolvable URL $url$getLocation", ex) } try { @@ -349,7 +343,7 @@ class XIncludeFilter extends XMLFilterImpl { if (bases.contains(source)) throw new SAXException( "Circular XInclude Reference", - new CircularIncludeException("Circular XInclude Reference to " + source + getLocation) + new CircularIncludeException(s"Circular XInclude Reference to $source$getLocation") ) bases push source @@ -361,7 +355,7 @@ class XIncludeFilter extends XMLFilterImpl { bases.pop() } catch { case e: IOException => - throw new SAXException("Document not found: " + source.toExternalForm + getLocation, e) + throw new SAXException(s"Document not found: ${source.toExternalForm}$getLocation", e) } } } diff --git a/shared/src/main/scala/scala/xml/include/sax/XIncluder.scala b/shared/src/main/scala/scala/xml/include/sax/XIncluder.scala index fd576e3a..ec94be79 100644 --- a/shared/src/main/scala/scala/xml/include/sax/XIncluder.scala +++ b/shared/src/main/scala/scala/xml/include/sax/XIncluder.scala @@ -32,8 +32,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit override def startDocument(): Unit = { try { - out.write("\r\n") + out.write(s"\r\n") } catch { case e: IOException => throw new SAXException("Write failed", e) @@ -55,17 +54,14 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit override def startElement(namespaceURI: String, localName: String, qualifiedName: String, atts: Attributes): Unit = { try { - out.write("<" + qualifiedName) + out.write(s"<$qualifiedName") var i: Int = 0 while (i < atts.getLength) { - out.write(" ") - out.write(atts.getQName(i)) - out.write("='") val value: String = atts.getValue(i) // @todo Need to use character references if the encoding // can't support the character - out.write(scala.xml.Utility.escape(value)) - out.write("'") + val valueStr: String = scala.xml.Utility.escape(value) + out.write(s" ${atts.getQName(i)}='$valueStr'") i += 1 } out.write(">") @@ -77,7 +73,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit override def endElement(namespaceURI: String, localName: String, qualifiedName: String): Unit = { try { - out.write("") + out.write(s"") } catch { case e: IOException => throw new SAXException("Write failed", e) @@ -113,7 +109,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit // do I need to escape text in PI???? override def processingInstruction(target: String, data: String): Unit = { try { - out.write("") + out.write(s"") } catch { case e: IOException => throw new SAXException("Write failed", e) @@ -122,7 +118,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit override def skippedEntity(name: String): Unit = { try { - out.write("&" + name + ";") + out.write(s"&$name;") } catch { case e: IOException => throw new SAXException("Write failed", e) @@ -138,10 +134,10 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit // if this is the source document, output a DOCTYPE declaration if (entities.isEmpty) { var id: String = "" - if (publicID != null) id = " PUBLIC \"" + publicID + "\" \"" + systemID + '"' - else if (systemID != null) id = " SYSTEM \"" + systemID + '"' + if (publicID != null) id = s""" PUBLIC "$publicID" "$systemID"""" + else if (systemID != null) id = s""" SYSTEM "$systemID"""" try { - out.write("\r\n") + out.write(s"\r\n") } catch { case e: IOException => throw new SAXException("Error while writing DOCTYPE", e) @@ -151,7 +147,7 @@ class XIncluder(outs: OutputStream, encoding: String) extends ContentHandler wit override def endDTD(): Unit = () override def startEntity(name: String): Unit = { - entities = name :: entities + entities = name :: entities } override def endEntity(name: String): Unit = { diff --git a/shared/src/main/scala/scala/xml/parsing/ExternalSources.scala b/shared/src/main/scala/scala/xml/parsing/ExternalSources.scala index 74e49c23..778ef627 100644 --- a/shared/src/main/scala/scala/xml/parsing/ExternalSources.scala +++ b/shared/src/main/scala/scala/xml/parsing/ExternalSources.scala @@ -34,6 +34,6 @@ trait ExternalSources { case x => x.take(x.lastIndexOf(separator) + 1) } - Source.fromFile(fileStr + systemId) + Source.fromFile(s"$fileStr$systemId") } } diff --git a/shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala b/shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala index 362c1516..d3f75dd5 100644 --- a/shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala +++ b/shared/src/main/scala/scala/xml/parsing/FactoryAdapter.scala @@ -27,9 +27,7 @@ trait ConsoleErrorHandler extends DefaultHandler2 { protected def printError(errtype: String, ex: SAXParseException): Unit = Console.withOut(Console.err) { - val s: String = "[%s]:%d:%d: %s".format( - errtype, ex.getLineNumber, ex.getColumnNumber, ex.getMessage) - Console.println(s) + Console.println(s"[$errtype]:${ex.getLineNumber}:${ex.getColumnNumber}: ${ex.getMessage}") Console.flush() } } diff --git a/shared/src/main/scala/scala/xml/parsing/MarkupHandler.scala b/shared/src/main/scala/scala/xml/parsing/MarkupHandler.scala index 1628a75a..ab647cf7 100755 --- a/shared/src/main/scala/scala/xml/parsing/MarkupHandler.scala +++ b/shared/src/main/scala/scala/xml/parsing/MarkupHandler.scala @@ -40,9 +40,9 @@ abstract class MarkupHandler { def replacementText(entityName: String): Source = Source.fromString(ent.get(entityName) match { case Some(ParsedEntityDecl(_, IntDef(value))) => value - case Some(ParameterEntityDecl(_, IntDef(value))) => " %s ".format(value) - case Some(_) => "".format(entityName) - case None => "".format(entityName) + case Some(ParameterEntityDecl(_, IntDef(value))) => s" value " + case Some(_) => s"" + case None => s"" }) def endDTD(n: String): Unit = () diff --git a/shared/src/main/scala/scala/xml/parsing/MarkupParser.scala b/shared/src/main/scala/scala/xml/parsing/MarkupParser.scala index 3bd46c0c..f76520da 100755 --- a/shared/src/main/scala/scala/xml/parsing/MarkupParser.scala +++ b/shared/src/main/scala/scala/xml/parsing/MarkupParser.scala @@ -40,7 +40,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { override type NamespaceType = NamespaceBinding override def truncatedError(msg: String): Nothing = throw FatalError(msg) - override def errorNoEnd(tag: String): Nothing = throw FatalError("expected closing tag of " + tag) + override def errorNoEnd(tag: String): Nothing = throw FatalError(s"expected closing tag of $tag") override def xHandleError(that: Char, msg: String): Unit = reportSyntaxError(msg) @@ -182,7 +182,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { case null => case Text(enc) => if (!isValidIANAEncoding(enc)) - reportSyntaxError("\"" + enc + "\" is not a valid encoding") + reportSyntaxError(s""""$enc" is not a valid encoding""") else { info_enc = Some(enc) n += 1 @@ -202,7 +202,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { if (m.length - n != 0) { val s: String = if (isProlog) "SDDecl? " else "" - reportSyntaxError("VersionInfo EncodingDecl? %sor '?>' expected!".format(s)) + reportSyntaxError(s"VersionInfo EncodingDecl? $s or '?>' expected!") } (info_ver, info_enc, info_stdl) @@ -655,7 +655,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { putChar(ch) //println("hello '"+ch+"'"+isPubIDChar(ch)) if (!isPubIDChar(ch)) - reportSyntaxError("char '" + ch + "' is not allowed in public id") + reportSyntaxError(s"char '$ch' is not allowed in public id") nextch() } nextch() @@ -752,7 +752,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { xToken('>') case _ => - curInput.reportError(pos, "unexpected character '" + ch + "', expected some markupdecl") + curInput.reportError(pos, s"unexpected character '$ch', expected some markupdecl") while (ch != '>' && !eof) nextch() } @@ -776,7 +776,7 @@ trait MarkupParser extends MarkupParserCommon with TokenTests { case _ if isSpace(ch) => xSpace() case _ => - reportSyntaxError("markupdecl: unexpected character '" + ch + "' #" + ch.toInt) + reportSyntaxError(s"markupdecl: unexpected character '$ch' #${ch.toInt}") nextch() } diff --git a/shared/src/main/scala/scala/xml/parsing/MarkupParserCommon.scala b/shared/src/main/scala/scala/xml/parsing/MarkupParserCommon.scala index ff43221d..8179b8a7 100644 --- a/shared/src/main/scala/scala/xml/parsing/MarkupParserCommon.scala +++ b/shared/src/main/scala/scala/xml/parsing/MarkupParserCommon.scala @@ -88,7 +88,7 @@ private[scala] trait MarkupParserCommon extends TokenTests { case `end` => return buf.toString case ch => buf.append(ch) } - scala.sys.error("Expected '%s'".format(end)) + scala.sys.error(s"Expected '$end'") } /** @@ -116,7 +116,7 @@ private[scala] trait MarkupParserCommon extends TokenTests { if (ch == SU) truncatedError("") else if (!isNameStart(ch)) - return errorAndResult("name expected, but char '%s' cannot start a name".format(ch), "") + return errorAndResult(s"name expected, but char '$ch' cannot start a name", "") val buf: StringBuilder = new StringBuilder @@ -136,7 +136,7 @@ private[scala] trait MarkupParserCommon extends TokenTests { case "apos" => "'" case "quot" => "\"" case "quote" => "\"" - case _ => "&" + s + ";" + case _ => s"&$s;" } /** @@ -206,7 +206,7 @@ private[scala] trait MarkupParserCommon extends TokenTests { def xToken(that: Char): Unit = { if (ch == that) nextch() - else xHandleError(that, "'%s' expected instead of '%s'".format(that, ch)) + else xHandleError(that, s"'$that' expected instead of '$ch'") } def xToken(that: Seq[Char]): Unit = that.foreach(xToken) diff --git a/shared/src/test/scala-2.x/scala/xml/TransformersTest.scala b/shared/src/test/scala-2.x/scala/xml/TransformersTest.scala index c67453e0..9f7e744f 100644 --- a/shared/src/test/scala-2.x/scala/xml/TransformersTest.scala +++ b/shared/src/test/scala-2.x/scala/xml/TransformersTest.scala @@ -67,7 +67,7 @@ class TransformersTest { n match { case t: Text if t.text.trim.nonEmpty => i += 1 - Text(t.text + "!") + Text(s"${t.text}!") case _ => n } } diff --git a/shared/src/test/scala/scala/xml/XMLTest.scala b/shared/src/test/scala/scala/xml/XMLTest.scala index 19d28c39..2b1c553a 100644 --- a/shared/src/test/scala/scala/xml/XMLTest.scala +++ b/shared/src/test/scala/scala/xml/XMLTest.scala @@ -25,7 +25,9 @@ class XMLTest { val pelems_1: NodeSeq = for (x <- p \ "bar"; y <- p \ "baz") yield { - Text(x.attributes("value").toString + y.attributes("bazValue").toString + "!") + val value = x.attributes("value") + val bazValue = y.attributes("bazValue") + Text(s"$value$bazValue!") } val pelems_2: NodeSeq = NodeSeq.fromSeq(List(Text("38!"), Text("58!")))