boolean computeSubtypeOf(Klass k) { if (k.isInterface()) { return implementsInterface(k); } else { return super.computeSubtypeOf(k); } }
public void iterateFields(OopVisitor visitor, boolean doVMFields) { super.iterateFields(visitor, doVMFields); if (doVMFields) { visitor.doCInt(dimension, true); visitor.doOop(higherDimension, true); visitor.doOop(lowerDimension, true); visitor.doCInt(vtableLen, true); visitor.doCInt(allocSize, true); visitor.doOop(componentMirror, true); } }
public boolean implementsInterface(Klass k) { if (Assert.ASSERTS_ENABLED) { Assert.that(k.isInterface(), "should not reach here"); } ObjArray interfaces = getTransitiveInterfaces(); final int len = (int) interfaces.getLength(); for (int i = 0; i < len; i++) { if (interfaces.getObjAt(i).equals(k)) return true; } return false; }
boolean computeSubtypeOf(Klass k) { // An array is a subtype of Serializable, Clonable, and Object Symbol name = k.getName(); if (name != null && (name.equals(javaIoSerializableName()) || name.equals(javaLangCloneableName()) || name.equals(javaLangObjectName()))) { return true; } else { return false; } }
public void iterateFields(OopVisitor visitor, boolean doVMFields) { super.iterateFields(visitor, doVMFields); if (doVMFields) { visitor.doOop(arrayKlasses, true); visitor.doOop(methods, true); visitor.doOop(methodOrdering, true); visitor.doOop(localInterfaces, true); visitor.doOop(transitiveInterfaces, true); visitor.doCInt(nofImplementors, true); for (int i = 0; i < IMPLEMENTORS_LIMIT; i++) visitor.doOop(implementors[i], true); visitor.doOop(fields, true); visitor.doOop(constants, true); visitor.doOop(classLoader, true); visitor.doOop(protectionDomain, true); visitor.doOop(signers, true); visitor.doOop(sourceFileName, true); visitor.doOop(innerClasses, true); visitor.doCInt(nonstaticFieldSize, true); visitor.doCInt(staticFieldSize, true); visitor.doCInt(staticOopFieldSize, true); visitor.doCInt(nonstaticOopMapSize, true); visitor.doCInt(isMarkedDependent, true); visitor.doCInt(initState, true); visitor.doCInt(vtableLen, true); visitor.doCInt(itableLen, true); } TypeArray fields = getFields(); int length = (int) fields.getLength(); for (int index = 0; index < length; index += NEXT_OFFSET) { short accessFlags = fields.getShortAt(index + ACCESS_FLAGS_OFFSET); short signatureIndex = fields.getShortAt(index + SIGNATURE_INDEX_OFFSET); FieldType type = new FieldType((Symbol) getConstants().getObjAt(signatureIndex)); AccessFlags access = new AccessFlags(accessFlags); if (access.isStatic()) { visitField(visitor, type, index); } } }