From de1ee0a3e29557d3895fb31eece8c6636148ffa1 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 11 Jun 2020 17:45:01 +0200 Subject: [PATCH] Fix #9161: Add toString to companion modules --- .../src/dotty/tools/dotc/ast/Desugar.scala | 5 +++- tests/run-macros/tasty-extractors-2.check | 2 +- tests/run/i9161.scala | 4 +++ tests/semanticdb/metac.expect | 28 +++++++++++++------ 4 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 tests/run/i9161.scala diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index 8de5da6eb390..315f730c0e97 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -699,7 +699,10 @@ object desugar { DefDef(methName, derivedTparams, (unapplyParam :: Nil) :: Nil, unapplyResTp, unapplyRHS) .withMods(synthetic) } - companionDefs(companionParent, applyMeths ::: unapplyMeth :: companionMembers) + val toStringMeth = + DefDef(nme.toString_, Nil, Nil, TypeTree(), Literal(Constant(className.toString))).withMods(Modifiers(Override | Synthetic)) + + companionDefs(companionParent, applyMeths ::: unapplyMeth :: toStringMeth :: companionMembers) } else if (companionMembers.nonEmpty || companionDerived.nonEmpty || isEnum) companionDefs(anyRef, companionMembers) diff --git a/tests/run-macros/tasty-extractors-2.check b/tests/run-macros/tasty-extractors-2.check index b732b4353c2b..e946ec04db52 100644 --- a/tests/run-macros/tasty-extractors-2.check +++ b/tests/run-macros/tasty-extractors-2.check @@ -49,7 +49,7 @@ TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(DefDef("a", Nil, Nil, Inferred(), Some(Literal(Constant(0))))))), Literal(Constant(())))) TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Unit") -Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Product"), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, None, List(DefDef("copy", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))))), ValDef("Foo", TypeIdent("Foo$"), Some(Apply(Select(New(TypeIdent("Foo$")), ""), Nil))), ClassDef("Foo$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), Applied(Inferred(), List(Inferred())), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo")), None)), List(DefDef("apply", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))), DefDef("unapply", Nil, List(List(ValDef("x$1", Inferred(), None))), Singleton(Literal(Constant(true))), Some(Literal(Constant(true))))))), Literal(Constant(())))) +Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Product"), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, None, List(DefDef("copy", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))))), ValDef("Foo", TypeIdent("Foo$"), Some(Apply(Select(New(TypeIdent("Foo$")), ""), Nil))), ClassDef("Foo$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), Applied(Inferred(), List(Inferred())), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo")), None)), List(DefDef("apply", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))), DefDef("unapply", Nil, List(List(ValDef("x$1", Inferred(), None))), Singleton(Literal(Constant(true))), Some(Literal(Constant(true)))), DefDef("toString", Nil, Nil, Inferred(), Some(Literal(Constant("Foo"))))))), Literal(Constant(())))) TypeRef(ThisType(TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo1", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None)))), Literal(Constant(())))) diff --git a/tests/run/i9161.scala b/tests/run/i9161.scala new file mode 100644 index 000000000000..adb7fa54b136 --- /dev/null +++ b/tests/run/i9161.scala @@ -0,0 +1,4 @@ + +final case class T(i:Int) + +@main def Test = assert(T.toString == "T") diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index 32ec79eb6fd4..ee42c66d1828 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -339,7 +339,7 @@ Schema => SemanticDB v4 Uri => Classes.scala Text => empty Language => Scala -Symbols => 106 entries +Symbols => 109 entries Occurrences => 130 entries Symbols: @@ -364,6 +364,7 @@ classes/C3#x. => val method x classes/C3. => final object C3 classes/C3.apply(). => method apply classes/C3.apply().(x) => param x +classes/C3.toString(). => method toString classes/C3.unapply(). => method unapply classes/C3.unapply().(x$1) => param x$1 classes/C4# => case class C4 @@ -377,6 +378,7 @@ classes/C4#x. => val method x classes/C4. => final object C4 classes/C4.apply(). => method apply classes/C4.apply().(x) => param x +classes/C4.toString(). => method toString classes/C4.unapply(). => method unapply classes/C4.unapply().(x$1) => param x$1 classes/C6# => case class C6 @@ -390,6 +392,7 @@ classes/C6#x. => val method x classes/C6. => final object C6 classes/C6.apply(). => method apply classes/C6.apply().(x) => param x +classes/C6.toString(). => method toString classes/C6.unapply(). => method unapply classes/C6.unapply().(x$1) => param x$1 classes/C7# => class C7 @@ -639,7 +642,7 @@ Schema => SemanticDB v4 Uri => Enums.scala Text => empty Language => Scala -Symbols => 157 entries +Symbols => 159 entries Occurrences => 203 entries Symbols: @@ -705,6 +708,7 @@ _empty_/Enums.Maybe.Just. => final object Just _empty_/Enums.Maybe.Just.apply(). => method apply _empty_/Enums.Maybe.Just.apply().(value) => param value _empty_/Enums.Maybe.Just.apply().[A] => typeparam A +_empty_/Enums.Maybe.Just.toString(). => method toString _empty_/Enums.Maybe.Just.unapply(). => method unapply _empty_/Enums.Maybe.Just.unapply().(x$1) => param x$1 _empty_/Enums.Maybe.Just.unapply().[A] => typeparam A @@ -788,6 +792,7 @@ _empty_/Enums.`<:<`.Refl#copy().[C] => typeparam C _empty_/Enums.`<:<`.Refl. => final object Refl _empty_/Enums.`<:<`.Refl.apply(). => method apply _empty_/Enums.`<:<`.Refl.apply().[C] => typeparam C +_empty_/Enums.`<:<`.Refl.toString(). => method toString _empty_/Enums.`<:<`.Refl.unapply(). => method unapply _empty_/Enums.`<:<`.Refl.unapply().(x$1) => param x$1 _empty_/Enums.`<:<`.Refl.unapply().[C] => typeparam C @@ -2071,7 +2076,7 @@ Schema => SemanticDB v4 Uri => NamedApplyBlock.scala Text => empty Language => Scala -Symbols => 45 entries +Symbols => 46 entries Occurrences => 46 entries Symbols: @@ -2100,6 +2105,7 @@ example/NamedApplyBlockCaseClassConstruction.Msg.apply(). => method apply example/NamedApplyBlockCaseClassConstruction.Msg.apply().(body) => param body example/NamedApplyBlockCaseClassConstruction.Msg.apply().(head) => param head example/NamedApplyBlockCaseClassConstruction.Msg.apply().(tail) => param tail +example/NamedApplyBlockCaseClassConstruction.Msg.toString(). => method toString example/NamedApplyBlockCaseClassConstruction.Msg.unapply(). => method unapply example/NamedApplyBlockCaseClassConstruction.Msg.unapply().(x$1) => param x$1 example/NamedApplyBlockCaseClassConstruction.bodyText. => val method bodyText @@ -2177,7 +2183,7 @@ Schema => SemanticDB v4 Uri => NamedArguments.scala Text => empty Language => Scala -Symbols => 15 entries +Symbols => 16 entries Occurrences => 13 entries Symbols: @@ -2193,6 +2199,7 @@ example/NamedArguments#User#name. => val method name example/NamedArguments#User. => final object User example/NamedArguments#User.apply(). => method apply example/NamedArguments#User.apply().(name) => param name +example/NamedArguments#User.toString(). => method toString example/NamedArguments#User.unapply(). => method unapply example/NamedArguments#User.unapply().(x$1) => param x$1 example/NamedArguments#``(). => primary ctor @@ -2430,7 +2437,7 @@ Schema => SemanticDB v4 Uri => Synthetic.scala Text => empty Language => Scala -Symbols => 37 entries +Symbols => 38 entries Occurrences => 163 entries Symbols: @@ -2456,6 +2463,7 @@ example/Synthetic#s.Bar#``(). => primary ctor example/Synthetic#s.Bar#copy(). => method copy example/Synthetic#s.Bar. => final object Bar example/Synthetic#s.Bar.apply(). => method apply +example/Synthetic#s.Bar.toString(). => method toString example/Synthetic#s.Bar.unapply(). => method unapply example/Synthetic#s.Bar.unapply().(x$1) => param x$1 example/Synthetic#s.apply(). => method apply @@ -3113,7 +3121,7 @@ Schema => SemanticDB v4 Uri => recursion.scala Text => empty Language => Scala -Symbols => 35 entries +Symbols => 36 entries Occurrences => 56 entries Symbols: @@ -3145,6 +3153,7 @@ recursion/Nats.Succ. => final object Succ recursion/Nats.Succ.apply(). => method apply recursion/Nats.Succ.apply().(p) => param p recursion/Nats.Succ.apply().[N] => typeparam N +recursion/Nats.Succ.toString(). => method toString recursion/Nats.Succ.unapply(). => method unapply recursion/Nats.Succ.unapply().(x$1) => param x$1 recursion/Nats.Succ.unapply().[N] => typeparam N @@ -3400,7 +3409,7 @@ Schema => SemanticDB v4 Uri => semanticdb-Types.scala Text => empty Language => Scala -Symbols => 140 entries +Symbols => 142 entries Occurrences => 250 entries Symbols: @@ -3428,6 +3437,7 @@ types/Foo#s. => val method s types/Foo. => final object Foo types/Foo.apply(). => method apply types/Foo.apply().(s) => param s +types/Foo.toString(). => method toString types/Foo.unapply(). => method unapply types/Foo.unapply().(x$1) => param x$1 types/Foo.x. => val method x @@ -3479,6 +3489,7 @@ types/Test.C#RepeatedType#s. => val method s types/Test.C#RepeatedType. => final object RepeatedType types/Test.C#RepeatedType.apply(). => method apply types/Test.C#RepeatedType.apply().(s) => param s +types/Test.C#RepeatedType.toString(). => method toString types/Test.C#RepeatedType.unapplySeq(). => method unapplySeq types/Test.C#RepeatedType.unapplySeq().(x$1) => param x$1 types/Test.C#TypeType. => final object TypeType @@ -3805,7 +3816,7 @@ Schema => SemanticDB v4 Uri => semanticdb-extract.scala Text => empty Language => Scala -Symbols => 17 entries +Symbols => 18 entries Occurrences => 22 entries Symbols: @@ -3821,6 +3832,7 @@ _empty_/AnObject.Foo#x. => val method x _empty_/AnObject.Foo. => final object Foo _empty_/AnObject.Foo.apply(). => method apply _empty_/AnObject.Foo.apply().(x) => param x +_empty_/AnObject.Foo.toString(). => method toString _empty_/AnObject.Foo.unapply(). => method unapply _empty_/AnObject.Foo.unapply().(x$1) => param x$1 _empty_/AnObject.foo(). => method foo