summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-05-26 09:54:53 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-05-26 09:54:53 +0000
commit0301bcfa431cceb6fbf55c7a6c31c611e17e6066 (patch)
tree5a353149e9a3f95c70422c832815486a9d0e5c58
parent5e9d2809ebc2fd77143d6dfdcfea62c24ea4da28 (diff)
downloadscala-0301bcfa431cceb6fbf55c7a6c31c611e17e6066.tar.gz
scala-0301bcfa431cceb6fbf55c7a6c31c611e17e6066.tar.bz2
scala-0301bcfa431cceb6fbf55c7a6c31c611e17e6066.zip
Closes #3452, inconsistency between method desc...
Closes #3452, inconsistency between method descriptors and java signature for static forwarders. Review by extempore.
-rw-r--r--src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
index ffdedd0cfc..21d1246cc4 100644
--- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
+++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala
@@ -814,7 +814,10 @@ abstract class GenJVM extends SubComponent {
import JAccessFlags._
val moduleName = javaName(module) // + "$"
val mirrorName = moduleName.substring(0, moduleName.length() - 1)
- val paramJavaTypes = m.info.paramTypes map toTypeKind
+
+ val methodInfo = module.thisType.memberInfo(m)
+
+ val paramJavaTypes = methodInfo.paramTypes map toTypeKind
val paramNames: Array[String] = new Array[String](paramJavaTypes.length);
for (i <- 0 until paramJavaTypes.length)
@@ -822,7 +825,7 @@ abstract class GenJVM extends SubComponent {
val mirrorMethod = jclass.addNewMethod(ACC_PUBLIC | ACC_FINAL | ACC_STATIC,
javaName(m),
- javaType(m.info.resultType),
+ javaType(methodInfo.resultType),
javaTypes(paramJavaTypes),
paramNames);
val mirrorCode = mirrorMethod.getCode().asInstanceOf[JExtendedCode];
@@ -838,7 +841,7 @@ abstract class GenJVM extends SubComponent {
i += 1
}
- mirrorCode.emitINVOKEVIRTUAL(moduleName, mirrorMethod.getName(), mirrorMethod.getType().asInstanceOf[JMethodType])
+ mirrorCode.emitINVOKEVIRTUAL(moduleName, mirrorMethod.getName(), javaType(m).asInstanceOf[JMethodType])
mirrorCode.emitRETURN(mirrorMethod.getReturnType())
addRemoteException(mirrorMethod, m)