diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Erasure.scala | 9 | ||||
-rw-r--r-- | test/files/pos/bug4317/J_2.java | 3 | ||||
-rw-r--r-- | test/files/pos/bug4317/S_1.scala | 3 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index dcc6ab044c..dad422a4a9 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -326,8 +326,13 @@ abstract class Erasure extends AddInterfaces val paramString = if (toplevel) tparams map paramSig mkString ("<", "", ">") else "" paramString + jsig(restpe) case MethodType(params, restpe) => - "("+(params map (_.tpe) map jsig).mkString+")"+ - (if (restpe.typeSymbol == UnitClass || sym0.isConstructor) VOID_TAG.toString else jsig(restpe)) + val ressym = restpe.typeSymbol + "(%s)%s".format( + params map (x => jsig(x.tpe)) mkString, + if (ressym == UnitClass || sym0.isConstructor) VOID_TAG + else if (isValueClass(ressym)) abbrvTag(ressym) + else jsig(restpe) + ) case RefinedType(parent :: _, decls) => jsig(parent) case ClassInfoType(parents, _, _) => diff --git a/test/files/pos/bug4317/J_2.java b/test/files/pos/bug4317/J_2.java new file mode 100644 index 0000000000..fc8f7ec476 --- /dev/null +++ b/test/files/pos/bug4317/J_2.java @@ -0,0 +1,3 @@ +class J_2 { + int bar() { return S_1.foo(String.class) ; } +}
\ No newline at end of file diff --git a/test/files/pos/bug4317/S_1.scala b/test/files/pos/bug4317/S_1.scala new file mode 100644 index 0000000000..9f368ee484 --- /dev/null +++ b/test/files/pos/bug4317/S_1.scala @@ -0,0 +1,3 @@ +object S_1 { + def foo(x: Class[_ <: AnyRef]) = 0 +} |