From d3aa042749b54e1fc0f3d5fa8db8ead84b55d337 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Mon, 12 Jul 2021 01:12:03 +0900 Subject: [PATCH] fix constructors Java generic signatures --- .../tools/dotc/transform/GenericSignatures.scala | 2 +- tests/generic-java-signatures/i10834.check | 6 ++++++ tests/generic-java-signatures/i10834.scala | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/generic-java-signatures/i10834.check create mode 100644 tests/generic-java-signatures/i10834.scala diff --git a/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala b/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala index 9024296eae89..9392d9038574 100644 --- a/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala +++ b/compiler/src/dotty/tools/dotc/transform/GenericSignatures.scala @@ -291,7 +291,7 @@ object GenericSignatures { case PolyType(tparams, mtpe: MethodType) => assert(tparams.nonEmpty) - if (toplevel) polyParamSig(tparams) + if (toplevel && !sym0.isConstructor) polyParamSig(tparams) jsig(mtpe) // Nullary polymorphic method diff --git a/tests/generic-java-signatures/i10834.check b/tests/generic-java-signatures/i10834.check new file mode 100644 index 000000000000..24413b10401f --- /dev/null +++ b/tests/generic-java-signatures/i10834.check @@ -0,0 +1,6 @@ +0 + +public A1(X) +0 + +public A2(java.lang.Object) diff --git a/tests/generic-java-signatures/i10834.scala b/tests/generic-java-signatures/i10834.scala new file mode 100644 index 000000000000..91fb9d8c6ad1 --- /dev/null +++ b/tests/generic-java-signatures/i10834.scala @@ -0,0 +1,16 @@ +class A1[X](val x: X) +class A2[F[_]](val x: F[String]) + +object Test { + def test(clazz: Class[?]): Unit = { + val List(constructor) = clazz.getConstructors().toList + println(constructor.getTypeParameters().length) + println(constructor.getTypeParameters().mkString(", ")) + println(constructor.toGenericString()) + } + + def main(args: Array[String]): Unit = { + test(classOf[A1[?]]) + test(classOf[A2[?]]) + } +}