From d9ed34881086648aa67c9fe6d47f8fa8b2870123 Mon Sep 17 00:00:00 2001 From: mihaylov Date: Tue, 17 Jan 2006 15:40:39 +0000 Subject: Generate static methods for inherited methods o... Generate static methods for inherited methods of objects; solves the problem of inherited main method (bug contrib #107) --- .../scala/tools/nsc/backend/jvm/GenJVM.scala | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/compiler') diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index 50a86fdf27..b01d39071d 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -284,12 +284,20 @@ abstract class GenJVM extends SubComponent { "java.lang.Object", JClass.NO_INTERFACES, clasz.cunit.source.toString()); - for (val m <- clasz.methods; !(m.symbol.hasFlag(Flags.PRIVATE)) && !m.symbol.isClassConstructor && !isStaticSymbol(m.symbol) ) { - val mirrorMethod = mirrorClass.addNewMethod(ACC_PUBLIC | ACC_FINAL | ACC_STATIC, - javaName(m.symbol), - javaType(toTypeKind(m.symbol.tpe.resultType)), - javaTypes(m.params map (.kind)), - javaNames(m.params map (.sym))); + for (val m <- clasz.symbol.tpe.nonPrivateMembers; + m.owner != definitions.ObjectClass && !m.hasFlag(Flags.PROTECTED) && + m.isMethod && !m.isConstructor && !isStaticSymbol(m) ) + { + val paramJavaTypes = m.tpe.paramTypes map (t => toTypeKind(t)); + val paramNames: Array[String] = new Array[String](paramJavaTypes.length); + for (val i <- Iterator.range(0, paramJavaTypes.length)) + paramNames(i) = "x_" + i; + val mirrorMethod = mirrorClass + .addNewMethod(ACC_PUBLIC | ACC_FINAL | ACC_STATIC, + javaName(m), + javaType(toTypeKind(m.tpe.resultType)), + javaTypes(paramJavaTypes), + paramNames); val mirrorCode = mirrorMethod.getCode().asInstanceOf[JExtendedCode]; mirrorCode.emitGETSTATIC(moduleName, MODULE_INSTANCE_NAME, -- cgit v1.2.3