Skip to content

Commit 1d84d3b

Browse files
Merge pull request #7164 from dotty-staging/fix-#7137
Fix #7137: Do not import Predef.any2stringadd by default
2 parents ca7617d + e30a02b commit 1d84d3b

File tree

12 files changed

+37
-21
lines changed

12 files changed

+37
-21
lines changed

compiler/src/dotty/tools/dotc/core/StdNames.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ object StdNames {
370370
val add_ : N = "add"
371371
val acc: N = "acc"
372372
val annotation: N = "annotation"
373+
val any2stringadd: N = "any2stringadd"
373374
val anyHash: N = "anyHash"
374375
val anyValClass: N = "anyValClass"
375376
val append: N = "append"

compiler/src/dotty/tools/dotc/typer/ImportInfo.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import Decorators._
1616
object ImportInfo {
1717
/** The import info for a root import from given symbol `sym` */
1818
def rootImport(refFn: () => TermRef, importGiven: Boolean = false)(implicit ctx: Context): ImportInfo = {
19-
val selectors = untpd.Ident(nme.WILDCARD) :: Nil
19+
// selectors: { _, any2stringadd => _ }
20+
val selectors = untpd.Ident(nme.WILDCARD) ::
21+
Thicket(untpd.Ident(nme.any2stringadd) :: untpd.Ident(nme.WILDCARD) :: Nil) ::
22+
Nil
2023
def expr(implicit ctx: Context) = tpd.Ident(refFn())
2124
def imp(implicit ctx: Context) = tpd.Import(importGiven = importGiven, expr, selectors)
2225
new ImportInfo(imp.symbol, selectors, None, importGiven = importGiven, isRootImport = true)

compiler/test/dotty/tools/backend/jvm/StringConcatTest.scala

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class StringConcatTest extends DottyBytecodeTest {
2929
| str: String,
3030
| sbuf: java.lang.StringBuffer,
3131
| chsq: java.lang.CharSequence,
32-
| chrs: Array[Char]) = str + this + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
32+
| chrs: Array[Char]) = str.toString + this + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
3333
|
3434
| // similar, but starting off with any2stringadd
3535
| def t2(
@@ -45,7 +45,7 @@ class StringConcatTest extends DottyBytecodeTest {
4545
| str: String,
4646
| sbuf: java.lang.StringBuffer,
4747
| chsq: java.lang.CharSequence,
48-
| chrs: Array[Char]) = this + str + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
48+
| chrs: Array[Char]) = this.toString + str + v + z + c + b + s + i + f + l + d + sbuf + chsq + chrs
4949
|}
5050
""".stripMargin
5151

@@ -60,8 +60,9 @@ class StringConcatTest extends DottyBytecodeTest {
6060
case Invoke(_, _, name, desc, _) => name + desc
6161
}
6262

63-
assertEquals(invokeNameDesc("t1"), List(
63+
assertEquals(List(
6464
"<init>()V",
65+
"toString()Ljava/lang/String;",
6566
"append(Ljava/lang/String;)Ljava/lang/StringBuilder;",
6667
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
6768
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
@@ -76,12 +77,14 @@ class StringConcatTest extends DottyBytecodeTest {
7677
"append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;",
7778
"append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;",
7879
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;", // test that we're not using the [C overload
79-
"toString()Ljava/lang/String;"))
80+
"toString()Ljava/lang/String;"),
81+
invokeNameDesc("t1")
82+
)
8083

81-
assertEquals(invokeNameDesc("t2"), List(
82-
"any2stringadd(Ljava/lang/Object;)Ljava/lang/Object;",
84+
assertEquals(List(
8385
"<init>()V",
84-
"$plus$extension(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;",
86+
"toString()Ljava/lang/String;",
87+
"append(Ljava/lang/String;)Ljava/lang/StringBuilder;",
8588
"append(Ljava/lang/String;)Ljava/lang/StringBuilder;",
8689
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
8790
"append(Z)Ljava/lang/StringBuilder;",
@@ -94,8 +97,10 @@ class StringConcatTest extends DottyBytecodeTest {
9497
"append(D)Ljava/lang/StringBuilder;",
9598
"append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;",
9699
"append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;",
97-
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;", // test that we're not using the [C overload
98-
"toString()Ljava/lang/String;"))
100+
"append(Ljava/lang/Object;)Ljava/lang/StringBuilder;",
101+
"toString()Ljava/lang/String;"),
102+
invokeNameDesc("t2")
103+
)
99104
}
100105
}
101106

@@ -124,6 +129,6 @@ class StringConcatTest extends DottyBytecodeTest {
124129
def chsq: java.lang.CharSequence = "chsq"
125130
val s = t((), true, 'd', 3: Byte, 12: Short, 3, -32l, 12.3f, -4.2d, "me", sbuf, chsq, Array('a', 'b'))
126131
val r = s.replaceAll("""\[C@\w+""", "<ARRAY>")
127-
assertEquals(r, "meTTT()trued312312.3-32-4.2sbufchsq<ARRAY>//TTTme()trued312312.3-32-4.2sbufchsq<ARRAY>")
132+
assertEquals("meTTT()trued312312.3-32-4.2sbufchsq<ARRAY>//TTTme()trued312312.3-32-4.2sbufchsq<ARRAY>", r)
128133
}
129134
}

compiler/test/dotty/tools/repl/TabcompleteTests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class TabcompleteTests extends ReplTest {
115115
@Test def anyRef = fromInitialState { implicit s =>
116116
val comp = tabComplete("(null: AnyRef).")
117117
assertEquals(
118-
List("!=", "##", "+", "->", "==", "asInstanceOf", "clone", "ensuring", "eq", "equals", "finalize", "formatted",
118+
List("!=", "##", "->", "==", "asInstanceOf", "clone", "ensuring", "eq", "equals", "finalize", "formatted",
119119
"getClass", "hashCode", "isInstanceOf", "ne", "notify", "notifyAll", "synchronized", "toString", "wait", ""),
120120
comp.distinct.sorted)
121121
}

tests/neg/i7137.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
object App {
3+
val any: Any = 3
4+
val str: String = any + "a" // error
5+
val str2: String = any2stringadd(any) + "a" // error
6+
val str3: String = Predef.any2stringadd(any) + "a"
7+
}

tests/plugins/custom/analyzer/Analyzer_1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class InitChecker extends PluginPhase with StandardPlugin {
8383
ctx.warning("tree: " + tree.symbol.defTree.show)
8484
}
8585
else {
86-
ctx.warning(tree.symbol + " is neither in lib nor hello, owner = " + enclosingPkg, tree.sourcePos)
86+
ctx.warning(tree.symbol.toString + " is neither in lib nor hello, owner = " + enclosingPkg, tree.sourcePos)
8787
}
8888
tree
8989
}

tests/run-macros/tasty-definitions-1/quoted_1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ object Macros {
1111
val buff = List.newBuilder[String]
1212
def printout(x: => String): Unit = {
1313

14-
buff += (try x catch { case ex => ex.getClass + ": " + ex.getMessage})
14+
buff += (try x catch { case ex => ex.getClass.toString + ": " + ex.getMessage})
1515
}
1616

1717
printout(defn.RootPackage.name)

tests/run-macros/xml-interpolation-4/Test_2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import XmlQuote._
33
object Test {
44
def main(args: Array[String]): Unit = {
55
assert(xml"Hello ${implicitly[Scope]} world!" == "Hello Scope(top+) world!")
6-
assert(xml"Hello ${ xml"world ${implicitly[Scope] + " " + xml"${implicitly[Scope]}"}" }!" ==
6+
assert(xml"Hello ${ xml"world ${implicitly[Scope].toString + " " + xml"${implicitly[Scope]}"}" }!" ==
77
"Hello world Scope(top++) Scope(top+++)!")
88
}
99
}

tests/run/equality.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ object Test
1515
def main(args: Array[String]): Unit = {
1616
var xs = makeFromInt(5)
1717
for (x <- xs ; y <- xs) {
18-
assert(x == y, x + " == " + y)
18+
assert(x == y, x.toString + " == " + y)
1919
assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
2020
}
2121

2222
xs = makeFromInt(-5)
2323
for (x <- xs ; y <- xs) {
24-
assert(x == y, x + " == " + y)
24+
assert(x == y, x.toString + " == " + y)
2525
assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
2626
}
2727

2828
xs = makeFromDouble(500.0)
2929
for (x <- xs ; y <- xs) {
30-
assert(x == y, x + " == " + y)
30+
assert(x == y, x.toString + " == " + y)
3131
assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y))
3232
}
3333

0 commit comments

Comments
 (0)