summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala9
-rw-r--r--test/files/pos/bug4317/J_2.java3
-rw-r--r--test/files/pos/bug4317/S_1.scala3
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
+}