From 3463a0723401b752177740f76bfca286c339ded9 Mon Sep 17 00:00:00 2001 From: changvvb Date: Mon, 28 Dec 2020 18:52:15 +0800 Subject: [PATCH] Enable generating signature for local class --- .../tools/dotc/transform/GenericSignatures.scala | 4 ++-- tests/generic-java-signatures/i6349.check | 2 ++ tests/generic-java-signatures/i6349.scala | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/generic-java-signatures/i6349.check create mode 100644 tests/generic-java-signatures/i6349.scala diff --git a/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala b/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala index 1ec149d505be..998dc2fcf9ab 100644 --- a/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala +++ b/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala @@ -33,8 +33,8 @@ object GenericSignatures { * @return The signature if it could be generated, `None` otherwise. */ def javaSig(sym0: Symbol, info: Type)(using Context): Option[String] = - // Avoid generating a signature for local symbols. - if (sym0.isLocal) None + // Avoid generating a signature for non-class local symbols. + if (sym0.isLocal && !sym0.isClass) None else atPhase(erasurePhase)(javaSig0(sym0, info)) @noinline diff --git a/tests/generic-java-signatures/i6349.check b/tests/generic-java-signatures/i6349.check new file mode 100644 index 000000000000..976cbd32e59d --- /dev/null +++ b/tests/generic-java-signatures/i6349.check @@ -0,0 +1,2 @@ +Foo +Foo diff --git a/tests/generic-java-signatures/i6349.scala b/tests/generic-java-signatures/i6349.scala new file mode 100644 index 000000000000..8bc16a845d39 --- /dev/null +++ b/tests/generic-java-signatures/i6349.scala @@ -0,0 +1,12 @@ +class Foo[T] +object Test { + class Inner extends Foo[String] + + def main(args: Array[String]): Unit = { + class Local extends Foo[String] + + println((new Inner).getClass.getGenericSuperclass) // Foo + + println((new Local).getClass.getGenericSuperclass) // Foo + } +}