Skip to content

Fix #5812: Compactify names when flattening #11279

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion compiler/src/dotty/tools/dotc/core/SymDenotations.scala
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,8 @@ object SymDenotations {
// duplicate scalac's behavior: don't write a double '$$' for module class members.
prefix = prefix.exclude(ModuleClassName)
def qualify(n: SimpleName) =
kind(prefix.toTermName, if (filler.isEmpty) n else termName(filler + n))
val qn = kind(prefix.toTermName, if (filler.isEmpty) n else termName(filler + n))
if kind == FlatName && !encl.is(JavaDefined) then qn.compactified else qn
val fn = name replace {
case name: SimpleName => qualify(name)
case name @ AnyQualifiedName(_, _) => qualify(name.mangled.toSimpleName)
Expand Down
9 changes: 9 additions & 0 deletions sbt-dotty/sbt-test/scala2-compat/longnames/build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
val scala3Version = sys.props("plugin.scalaVersion")
val scala2Version = "2.13.4"

lazy val lib = (project in file ("lib"))
.settings(scalaVersion := scala2Version)

lazy val test = (project in file ("main"))
.dependsOn(lib)
.settings(scalaVersion := scala3Version)
35 changes: 35 additions & 0 deletions sbt-dotty/sbt-test/scala2-compat/longnames/lib/lib.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class reallongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongname {
object obj0
object obj01
object obj012
object obj0123
object obj01234
object obj012345
object obj0123456
object obj01234567
object obj012345678
object obj0123456789
object obj01234567890
class cls0
class cls01
class cls012
class cls0123
class cls01234
class cls012345
class cls0123456
class cls01234567
class cls012345678
class cls0123456789
class cls01234567890
trait trt0
trait trt01
trait trt012
trait trt0123
trait trt01234
trait trt012345
trait trt0123456
trait trt01234567
trait trt012345678
trait trt0123456789
trait trt01234567890
}
41 changes: 41 additions & 0 deletions sbt-dotty/sbt-test/scala2-compat/longnames/main/test.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
object Test extends App {
val c = new reallongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongnamereallylongname

import c._

val o0 = obj0
val o1 = obj01
val o2 = obj012
val o3 = obj0123
val o4 = obj01234
val o5 = obj012345
val o6 = obj0123456
val o7 = obj01234567
val o8 = obj012345678
val o9 = obj0123456789
val o10 = obj01234567890

val c0 = new cls0
val c1 = new cls01
val c2 = new cls012
val c3 = new cls0123
val c4 = new cls01234
val c5 = new cls012345
val c6 = new cls0123456
val c7 = new cls01234567
val c8 = new cls012345678
val c9 = new cls0123456789
val c10 = new cls01234567890

val t0 = new trt0 {}
val t1 = new trt01 {}
val t2 = new trt012 {}
val t3 = new trt0123 {}
val t4 = new trt01234 {}
val t5 = new trt012345 {}
val t6 = new trt0123456 {}
val t7 = new trt01234567 {}
val t8 = new trt012345678 {}
val t9 = new trt0123456789 {}
val t10 = new trt01234567890 {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin("ch.epfl.lamp" % "sbt-dotty" % sys.props("plugin.version"))
1 change: 1 addition & 0 deletions sbt-dotty/sbt-test/scala2-compat/longnames/test
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
> test/run
6 changes: 6 additions & 0 deletions tests/run/java-longnames/Long_1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package p;

public class Long_1 {
public static class ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ_1 {
}
}
9 changes: 9 additions & 0 deletions tests/run/java-longnames/Test_2.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import p._

object Test extends App {
println(
new Long_1.ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ_1()
.getClass
.getName
)
}
1 change: 0 additions & 1 deletion tests/pending/run/t8199.scala → tests/run/t8199.scala
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ object Test extends App {
}
def checkCallerImplClassName(): Unit = {
val name = Thread.currentThread.getStackTrace.apply(2).getClassName
assert(name.contains("$class"))
Test.checkClassName(name)
}

Expand Down