From 12e6ae339d88d0b2701db41e2a1fbf049bd45466 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Tue, 20 Mar 2018 15:42:36 +0100 Subject: [PATCH] Fix #4138: Do not emit forwarders for methods with expanded names This was accidentally broken in 21ab9a1355036aa953db4e1f87c8f0f9a06506b5 when the ExpandedName symbol flag was replaced by a name kind. --- .../backend/jvm/DottyBackendInterface.scala | 3 ++- scala-backend | 2 +- tests/run/forwarder.check | 1 + tests/run/forwarder.scala | 20 +++++++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tests/run/forwarder.check create mode 100644 tests/run/forwarder.scala diff --git a/compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala b/compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala index 008c5aab184c..0259db5090ad 100644 --- a/compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala +++ b/compiler/src/dotty/tools/backend/jvm/DottyBackendInterface.scala @@ -33,7 +33,7 @@ import tpd._ import scala.tools.asm import StdNames.{nme, str} import NameOps._ -import NameKinds.DefaultGetterName +import NameKinds.{DefaultGetterName, ExpandedName} import dotty.tools.dotc.core import dotty.tools.dotc.core.Names.TypeName @@ -677,6 +677,7 @@ class DottyBackendInterface(outputDirectory: AbstractFile, val superCallsMap: Ma def isType: Boolean = sym.isType def isAnonymousClass: Boolean = toDenot(sym).isAnonymousClass def isConstructor: Boolean = toDenot(sym).isConstructor + def isExpanded: Boolean = sym.name.is(ExpandedName) def isAnonymousFunction: Boolean = toDenot(sym).isAnonymousFunction def isMethod: Boolean = sym is Flags.Method def isPublic: Boolean = sym.flags.is(Flags.EmptyFlags, Flags.Private | Flags.Protected) diff --git a/scala-backend b/scala-backend index 73ea6de97328..52a9b6af1440 160000 --- a/scala-backend +++ b/scala-backend @@ -1 +1 @@ -Subproject commit 73ea6de9732881591c73832092d440be0080e791 +Subproject commit 52a9b6af1440cdfd92f54f56cbe3b4a911a3243d diff --git a/tests/run/forwarder.check b/tests/run/forwarder.check new file mode 100644 index 000000000000..739152e654d8 --- /dev/null +++ b/tests/run/forwarder.check @@ -0,0 +1 @@ +public static int Foo.hi() diff --git a/tests/run/forwarder.scala b/tests/run/forwarder.scala new file mode 100644 index 000000000000..540acb76a58b --- /dev/null +++ b/tests/run/forwarder.scala @@ -0,0 +1,20 @@ +class Foo +object Foo extends Bar + +trait Bar { + def hi: Int = 1 + private def foo: Int = 1 + + class Inner { + val a = foo // Force foo to be expanded by ExpandPrivate + } +} + +object Test { + def main(args: Array[String]): Unit = { + println( + classOf[Foo].getMethods + .filter(m => (m.getModifiers & java.lang.reflect.Modifier.STATIC) != 0) + .mkString("\n")) + } +}