From 46a978e022b1bc3d1b77e8b5402db6d3ab6dd28f Mon Sep 17 00:00:00 2001 From: michelou Date: Thu, 16 Dec 2010 19:50:43 +0000 Subject: do not add entry in InnerClass attribute if out... do not add entry in InnerClass attribute if outer name is null (according to comment for outerName method) in order to remove the following warning message reported by the dx tool (Android): warning: Ignoring InnerClasses attribute for an anonymous inner class (test$$anonfun$1) that doesn't come with an associated EnclosingMethod attribute. This class was probably produced by a compiler that did not target the modern .class file format. The recommended solution is to recompile the class from source, using an up-to-date compiler and without specifying any "-target" type options. The consequence of ignoring this warning is that reflective operations on this class will incorrectly indicate that it is *not* an inner class. --- .../scala/tools/nsc/backend/jvm/GenJVM.scala | 204 +++++++++++---------- 1 file changed, 103 insertions(+), 101 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala index 6a3c7a000a..41df23427b 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/GenJVM.scala @@ -73,8 +73,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { def moduleSuffix(sym: Symbol) = if (sym.hasModuleFlag && !sym.isMethod && !sym.isImplClass && !sym.isJavaDefined) "$" - else ""; - + else "" var pickledBytes = 0 // statistics @@ -126,9 +125,9 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { val versionPickle = { val vp = new PickleBuffer(new Array[Byte](16), -1, 0) assert(vp.writeIndex == 0) - vp.writeNat(PickleFormat.MajorVersion) - vp.writeNat(PickleFormat.MinorVersion) - vp.writeNat(0) + vp writeNat PickleFormat.MajorVersion + vp writeNat PickleFormat.MinorVersion + vp writeNat 0 vp } @@ -138,7 +137,8 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { var jmethod: JMethod = _ // var jcode: JExtendedCode = _ - var innerClasses: immutable.Set[Symbol] = immutable.ListSet.empty // referenced inner classes + // referenced inner classes + var innerClasses: immutable.Set[Symbol] = immutable.ListSet.empty val fjbgContext = new FJBGContext(49, 0) @@ -156,7 +156,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { addInnerClasses(jclass) val outfile = getFile(sym, jclass, ".class") val outstream = new DataOutputStream(outfile.bufferedOutput) - jclass.writeTo(outstream) + jclass writeTo outstream outstream.close() informProgress("wrote " + outfile) } @@ -181,12 +181,12 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { * signature (a Scala marker attribute has been written). */ def scalaSignatureAddingMarker(jclass: JClass, sym: Symbol): Option[AnnotationInfo] = - currentRun.symData.get(sym) match { + currentRun.symData get sym match { case Some(pickle) if !jclass.getName().endsWith("$") => val scalaAttr = fjbgContext.JOtherAttribute(jclass, jclass, tpnme.ScalaSignatureATTR.toString, versionPickle.bytes, versionPickle.writeIndex) - jclass.addAttribute(scalaAttr) + jclass addAttribute scalaAttr val scalaAnnot = { val sigBytes = ScalaSigBytes(pickle.bytes.take(pickle.writeIndex)) AnnotationInfo(sigBytes.sigAnnot, Nil, List((nme.bytes, sigBytes))) @@ -198,7 +198,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { case _ => val markerAttr = fjbgContext.JOtherAttribute(jclass, jclass, tpnme.ScalaATTR.toString, new Array[Byte](0), 0) - jclass.addAttribute(markerAttr) + jclass addAttribute markerAttr None } @@ -253,12 +253,12 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { if (isStaticModule(c.symbol) || serialVUID != None || isParcelableClass || clasz.bootstrapClass.isDefined) { if (isStaticModule(c.symbol)) - addModuleInstanceField; + addModuleInstanceField addStaticInit(jclass, c.lookupStaticCtor) if (isTopLevelModule(c.symbol)) { if (c.symbol.companionClass == NoSymbol) - dumpMirrorClass(c.symbol, c.cunit.source.toString); + dumpMirrorClass(c.symbol, c.cunit.source.toString) else log("No mirror class for module with linked class: " + c.symbol.fullName) @@ -269,7 +269,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { // it must be a top level class (name contains no $s) def isCandidateForForwarders(sym: Symbol): Boolean = - atPhase (currentRun.picklerPhase.next) { + atPhase(currentRun.picklerPhase.next) { !(sym.name.toString contains '$') && sym.hasModuleFlag && !sym.isImplClass && !sym.isNestedClass } @@ -292,7 +292,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { val ssa = scalaSignatureAddingMarker(jclass, c.symbol) addGenericSignature(jclass, c.symbol, c.symbol.owner) addAnnotations(jclass, c.symbol.annotations ++ ssa) - if (needsEnclosingMethod) addEnclosingMethodAttribute(jclass, c.symbol) + if (needsEnclosingMethod) addEnclosingMethodAttribute(jclass, c.symbol) emitClass(jclass, c.symbol) if (c.symbol hasAnnotation BeanInfoAttr) @@ -304,7 +304,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { if (sym.isMethod) { log("enclosing method for %s is %s".format(clazz, sym)) var outerName = javaName(sym.enclClass) - jclass.addAttribute(fjbgContext.JEnclosingMethodAttribute(jclass, outerName, javaName(sym), javaType(sym))) + jclass addAttribute fjbgContext.JEnclosingMethodAttribute(jclass, outerName, javaName(sym), javaType(sym)) } } @@ -315,7 +315,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { */ def genBeanInfoClass(c: IClass) { val description = c.symbol.annotations.find(_.atp.typeSymbol == BeanDescriptionAttr) - // informProgress(description.toString()) + // informProgress(description.toString) val beanInfoClass = fjbgContext.JClass(javaFlags(c.symbol), javaName(c.symbol) + "BeanInfo", @@ -347,28 +347,28 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { var fi = 0 for (f <- lst) { jcode.emitDUP() - jcode.emitPUSH(fi) + jcode emitPUSH fi if (f != null) - jcode.emitPUSH(f) + jcode emitPUSH f else jcode.emitACONST_NULL() - jcode.emitASTORE(strKind) + jcode emitASTORE strKind fi += 1 } } jcode.emitALOAD_0() // push the class - jcode.emitPUSH(javaType(c.symbol).asInstanceOf[JReferenceType]) + jcode emitPUSH javaType(c.symbol).asInstanceOf[JReferenceType] // push the the string array of field information - jcode.emitPUSH(fieldList.length) - jcode.emitANEWARRAY(strKind) + jcode emitPUSH fieldList.length + jcode emitANEWARRAY strKind push(fieldList) // push the string array of method information - jcode.emitPUSH(methodList.length) - jcode.emitANEWARRAY(strKind) + jcode emitPUSH methodList.length + jcode emitANEWARRAY strKind push(methodList) // invoke the superclass constructor, which will do the @@ -379,22 +379,21 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { // write the bean information class file. val outfile = getFile(c.symbol, beanInfoClass, ".class") val outstream = new DataOutputStream(outfile.bufferedOutput) - beanInfoClass.writeTo(outstream) + beanInfoClass writeTo outstream outstream.close() informProgress("wrote BeanInfo " + outfile) } - /** Add the given 'throws' attributes to jmethod */ def addExceptionsAttribute(jmethod: JMethod, excs: List[AnnotationInfo]) { if (excs.isEmpty) return - val cpool = jmethod.getConstantPool() + val cpool = jmethod.getConstantPool val buf: ByteBuffer = ByteBuffer.allocate(512) var nattr = 0 // put some random value; the actual number is determined at the end - buf.putShort(0xbaba.toShort) + buf putShort 0xbaba.toShort for (AnnotationInfo(tp, List(exc), _) <- excs.distinct if tp.typeSymbol == ThrowsClass) { val Literal(const) = exc @@ -413,83 +412,83 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { * .initialize: if 'annot' is read from pickle, atp might be un-initialized */ private def shouldEmitAnnotation(annot: AnnotationInfo) = - (annot.atp.typeSymbol.initialize.isJavaDefined && - annot.atp.typeSymbol.isNonBottomSubClass(ClassfileAnnotationClass) && - annot.args.isEmpty) + annot.atp.typeSymbol.initialize.isJavaDefined && + annot.atp.typeSymbol.isNonBottomSubClass(ClassfileAnnotationClass) && + annot.args.isEmpty private def emitJavaAnnotations(cpool: JConstantPool, buf: ByteBuffer, annotations: List[AnnotationInfo]): Int = { def emitArgument(arg: ClassfileAnnotArg): Unit = arg match { case LiteralAnnotArg(const) => const.tag match { case BooleanTag => - buf.put('Z'.toByte) - buf.putShort(cpool.addInteger(if(const.booleanValue) 1 else 0).toShort) + buf put 'Z'.toByte + buf putShort cpool.addInteger(if(const.booleanValue) 1 else 0).toShort case ByteTag => - buf.put('B'.toByte) - buf.putShort(cpool.addInteger(const.byteValue).toShort) + buf put 'B'.toByte + buf putShort cpool.addInteger(const.byteValue).toShort case ShortTag => - buf.put('S'.toByte) - buf.putShort(cpool.addInteger(const.shortValue).toShort) + buf put 'S'.toByte + buf putShort cpool.addInteger(const.shortValue).toShort case CharTag => - buf.put('C'.toByte) - buf.putShort(cpool.addInteger(const.charValue).toShort) + buf put 'C'.toByte + buf putShort cpool.addInteger(const.charValue).toShort case IntTag => - buf.put('I'.toByte) - buf.putShort(cpool.addInteger(const.intValue).toShort) + buf put 'I'.toByte + buf putShort cpool.addInteger(const.intValue).toShort case LongTag => - buf.put('J'.toByte) - buf.putShort(cpool.addLong(const.longValue).toShort) + buf put 'J'.toByte + buf putShort cpool.addLong(const.longValue).toShort case FloatTag => - buf.put('F'.toByte) - buf.putShort(cpool.addFloat(const.floatValue).toShort) + buf put 'F'.toByte + buf putShort cpool.addFloat(const.floatValue).toShort case DoubleTag => - buf.put('D'.toByte) - buf.putShort(cpool.addDouble(const.doubleValue).toShort) + buf put 'D'.toByte + buf putShort cpool.addDouble(const.doubleValue).toShort case StringTag => - buf.put('s'.toByte) - buf.putShort(cpool.addUtf8(const.stringValue).toShort) + buf put 's'.toByte + buf putShort cpool.addUtf8(const.stringValue).toShort case ClassTag => - buf.put('c'.toByte) - buf.putShort(cpool.addUtf8(javaType(const.typeValue).getSignature()).toShort) + buf put 'c'.toByte + buf putShort cpool.addUtf8(javaType(const.typeValue).getSignature()).toShort case EnumTag => - buf.put('e'.toByte) - buf.putShort(cpool.addUtf8(javaType(const.tpe).getSignature()).toShort) - buf.putShort(cpool.addUtf8(const.symbolValue.name.toString).toShort) + buf put 'e'.toByte + buf putShort cpool.addUtf8(javaType(const.tpe).getSignature()).toShort + buf putShort cpool.addUtf8(const.symbolValue.name.toString).toShort } case sb@ScalaSigBytes(bytes) if !sb.isLong => - buf.put('s'.toByte) - buf.putShort(cpool.addUtf8(sb.encodedBytes).toShort) + buf put 's'.toByte + buf putShort cpool.addUtf8(sb.encodedBytes).toShort case sb@ScalaSigBytes(bytes) if sb.isLong => - buf.put('['.toByte) + buf put '['.toByte val stringCount = (sb.encodedBytes.length / 65534) + 1 - buf.putShort(stringCount.toShort) + buf putShort stringCount.toShort for (i <- 0 until stringCount) { - buf.put('s'.toByte) + buf put 's'.toByte val j = i * 65535 val string = sb.encodedBytes.slice(j, j + 65535) - buf.putShort(cpool.addUtf8(string).toShort) + buf putShort cpool.addUtf8(string).toShort } case ArrayAnnotArg(args) => - buf.put('['.toByte) - buf.putShort(args.length.toShort) + buf put '['.toByte + buf putShort args.length.toShort args foreach emitArgument case NestedAnnotArg(annInfo) => - buf.put('@'.toByte) + buf put '@'.toByte emitAnnotation(annInfo) } def emitAnnotation(annotInfo: AnnotationInfo) { val AnnotationInfo(typ, args, assocs) = annotInfo val jtype = javaType(typ) - buf.putShort(cpool.addUtf8(jtype.getSignature()).toShort) + buf putShort cpool.addUtf8(jtype.getSignature()).toShort assert(args.isEmpty, args.toString) - buf.putShort(assocs.length.toShort) + buf putShort assocs.length.toShort for ((name, value) <- assocs) { - buf.putShort(cpool.addUtf8(name.toString).toShort) + buf putShort cpool.addUtf8(name.toString).toShort emitArgument(value) } } @@ -498,7 +497,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { val pos = buf.position() // put some random value; the actual number of annotations is determined at the end - buf.putShort(0xbaba.toShort) + buf putShort 0xbaba.toShort for (annot <- annotations if shouldEmitAnnotation(annot)) { nannots += 1 @@ -510,12 +509,15 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { nannots } - // @M don't generate java generics sigs for (members of) implementation classes, as they are monomorphic (TODO: ok?) + // @M don't generate java generics sigs for (members of) implementation + // classes, as they are monomorphic (TODO: ok?) private def noGenericSignature(sym: Symbol) = ( - // PP: This condition used to include sym.hasExpandedName, but this leads to the total loss - // of generic information if a private member is accessed from a closure: both the field and - // the accessor were generated without it. This is particularly bad because the availability - // of generic information could disappear as a consequence of a seemingly unrelated change. + // PP: This condition used to include sym.hasExpandedName, but this leads + // to the total loss of generic information if a private member is + // accessed from a closure: both the field and the accessor were generated + // without it. This is particularly bad because the availability of + // generic information could disappear as a consequence of a seemingly + // unrelated change. sym.isSynthetic || sym.isLiftedMethod || (sym.ownerChain exists (_.isImplClass)) @@ -530,13 +532,13 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { if (settings.Yverifysigs.value) verifySig(sym, sig) - val index = jmember.getConstantPool().addUtf8(sig).toShort + val index = jmember.getConstantPool.addUtf8(sig).toShort if (settings.debug.value && settings.verbose.value) atPhase(currentRun.erasurePhase) { println("add generic sig "+sym+":"+sym.info+" ==> "+sig+" @ "+index) } val buf = ByteBuffer.allocate(2) - buf.putShort(index) + buf putShort index addAttribute(jmember, tpnme.SignatureATTR, buf) } } @@ -623,15 +625,17 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { val innerClassesAttr = jclass.getInnerClasses() // sort them so inner classes succeed their enclosing class // to satisfy the Eclipse Java compiler - for (innerSym <- innerClasses.toList sortBy (_.name.length)) { + //for (innerSym <- innerClasses.toList sortBy (_.name.length)) { + for (innerSym <- innerClasses.toList sortBy (_.name.length); + outer = outerName(innerSym) if outer != null) { var flags = javaFlags(innerSym) if (innerSym.rawowner.hasModuleFlag) flags |= ACC_STATIC innerClassesAttr.addEntry(javaName(innerSym), - outerName(innerSym), + outer, //outerName(innerSym), innerName(innerSym), - (flags & INNER_CLASSES_FLAGS)); + (flags & INNER_CLASSES_FLAGS)) } } } @@ -669,10 +673,10 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { var resTpe = javaType(m.symbol.tpe.resultType) if (m.symbol.isClassConstructor) - resTpe = JType.VOID; + resTpe = JType.VOID var flags = javaFlags(m.symbol) - if (jclass.isInterface()) + if (jclass.isInterface) flags |= ACC_ABSTRACT if (m.symbol.isStrictFP) @@ -686,7 +690,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { javaName(m.symbol), resTpe, javaTypes(m.params map (_.kind)), - javaNames(m.params map (_.sym))); + javaNames(m.params map (_.sym))) addRemoteException(jmethod, m.symbol) @@ -713,7 +717,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { for (local <- m.locals if ! m.params.contains(local)) { if (settings.debug.value) - log("add local var: " + local); + log("add local var: " + local) jmethod.addNewLocalVariable(javaType(local.kind), javaName(local.sym)) } @@ -740,7 +744,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } if (isRemoteClass || - (meth.hasAnnotation(RemoteAttr) && jmethod.isPublic())) { + (meth.hasAnnotation(RemoteAttr) && jmethod.isPublic)) { val c = Constant(RemoteException) val ainfo = AnnotationInfo(ThrowsClass.tpe, List(Literal(c).setType(c.tpe)), List()) if (!meth.annotations.exists(isRemoteThrows)) { @@ -764,7 +768,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { (sym.name == nme.apply) && sym.owner.isSynthetic && sym.owner.tpe.parents.exists { t => - val TypeRef(_, sym, _) = t; + val TypeRef(_, sym, _) = t FunctionClass contains sym } } @@ -793,8 +797,8 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { if (isStaticModule(clasz.symbol)) { // call object's private ctor from static ctor - lastBlock.emit(NEW(REFERENCE(m.symbol.enclClass))) - lastBlock.emit(CALL_METHOD(m.symbol.enclClass.primaryConstructor, Static(true))) + lastBlock emit NEW(REFERENCE(m.symbol.enclClass)) + lastBlock emit CALL_METHOD(m.symbol.enclClass.primaryConstructor, Static(true)) } // add serialVUID code @@ -897,7 +901,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { i += 1 } - mirrorCode.emitINVOKEVIRTUAL(moduleName, mirrorMethod.getName(), javaType(m).asInstanceOf[JMethodType]) + mirrorCode.emitINVOKEVIRTUAL(moduleName, mirrorMethod.getName, javaType(m).asInstanceOf[JMethodType]) mirrorCode emitRETURN mirrorMethod.getReturnType() addRemoteException(mirrorMethod, m) @@ -1054,7 +1058,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { if (!covered.isEmpty) if (settings.debug.value) log("Some covered blocks were not found in method: " + method + - " covered: " + covered + " not in " + linearization); + " covered: " + covered + " not in " + linearization) ranges } @@ -1077,7 +1081,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { labels(b).anchorToNext() if (settings.debug.value) - log("Generating code for block: " + b + " at pc: " + labels(b).getAnchor()); + log("Generating code for block: " + b + " at pc: " + labels(b).getAnchor()) var lastMappedPC = 0 var lastLineNr = 0 var crtPC = 0 @@ -1137,7 +1141,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { javaType(module)); case STORE_ARRAY_ITEM(kind) => - jcode.emitASTORE(javaType(kind)) + jcode emitASTORE javaType(kind) case STORE_LOCAL(local) => jcode.emitSTORE(indexOf(local), javaType(local.kind)) @@ -1266,11 +1270,11 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { i += 1 } if (settings.debug.value) - log("Emitting SWITCH:\ntags: " + tags + "\nbranches: " + branches); + log("Emitting SWITCH:\ntags: " + tags + "\nbranches: " + branches) jcode.emitSWITCH(tagArray, branchArray, labels(branches.last), - MIN_SWITCH_DENSITY); + MIN_SWITCH_DENSITY) () case JUMP(whereto) => @@ -1286,7 +1290,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } else { jcode.emitIF_ICMP(conds(cond), labels(success)) if (nextBlock != failure) - jcode.emitGOTO_maybe_W(labels(failure), false); + jcode.emitGOTO_maybe_W(labels(failure), false) } case REFERENCE(_) | ARRAY(_) => @@ -1296,7 +1300,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } else { jcode.emitIF_ACMP(conds(cond), labels(success)) if (nextBlock != failure) - jcode.emitGOTO_maybe_W(labels(failure), false); + jcode.emitGOTO_maybe_W(labels(failure), false) } case _ => @@ -1310,12 +1314,12 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { else jcode.emitDCMPL() } if (nextBlock == success) { - jcode.emitIF(conds(negate(cond)), labels(failure)); + jcode.emitIF(conds(negate(cond)), labels(failure)) // .. and fall through to success label } else { jcode.emitIF(conds(cond), labels(success)); if (nextBlock != failure) - jcode.emitGOTO_maybe_W(labels(failure), false); + jcode.emitGOTO_maybe_W(labels(failure), false) } } @@ -1327,7 +1331,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } else { jcode.emitIF(conds(cond), labels(success)) if (nextBlock != failure) - jcode.emitGOTO_maybe_W(labels(failure), false); + jcode.emitGOTO_maybe_W(labels(failure), false) } case REFERENCE(_) | ARRAY(_) => @@ -1368,7 +1372,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } else { jcode.emitIF(conds(cond), labels(success)) if (nextBlock != failure) - jcode.emitGOTO_maybe_W(labels(failure), false); + jcode.emitGOTO_maybe_W(labels(failure), false) } } @@ -1428,7 +1432,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { } if (b.lastInstruction == instr) - endPC(b) = jcode.getPC(); + endPC(b) = jcode.getPC() //System.err.println("CRTLINE: " + instr.pos + " " + // /* (if (instr.pos < clasz.cunit.source.content.length) clasz.cunit.source.content(instr.pos) else '*') + */ " " + crtLine); @@ -1637,7 +1641,7 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { var vars = m.locals filterNot (_.sym.isSynthetic) if (vars.length == 0) return - val pool = jclass.getConstantPool() + val pool = jclass.getConstantPool val pc = jcode.getPC() var anonCounter = 0 var entries = 0 @@ -1731,7 +1735,6 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { super.javaName(sym) } - /** Calls to methods in 'sym' need invokeinterface? */ def needsInterfaceCall(sym: Symbol): Boolean = { log("checking for interface call: " + sym.fullName) @@ -1819,5 +1822,4 @@ abstract class GenJVM extends SubComponent with GenJVMUtil with GenAndroid { sym.isModuleClass && !sym.isImplClass && !sym.isLifted } - } -- cgit v1.2.3