private void disassemble(String indent, Annotation[] annotations) { for (int i=0; i<annotations.length; i++) { print(indent); disassemble(indent, annotations[i]); println(); } }
private void disassemble(String indent, CodeAttr code) { CodeBuffer buffer = code.getCodeBuffer(); mExceptionHandlers = buffer.getExceptionHandlers(); print(indent); print("// max stack: "); println(String.valueOf(buffer.getMaxStackDepth())); print(indent); print("// max locals: "); println(String.valueOf(buffer.getMaxLocals())); print(indent, mnemonic); print(" "); disassemble(constant); } else { print(constant); disassemble(constant); } else { print(constant); print(" "); print(String.valueOf(dims)); break; disassemble((TypeDesc)type); } else { print(type);
private StackMapTableAttr.StackMapFrame stackMap(String indent, StackMapTableAttr.StackMapFrame frame) { if (frame == null) { return null; } if (mAddress < frame.getOffset()) { return frame; } print(indent); print("// stack: "); print(frame.getStackItemInfos()); println(); print(indent); print("// locals: "); print(frame.getLocalInfos()); println(); return frame.getNext(); }
private void printCharLiteral(int value) { if (value >= 0 && value <= 65535) { int type = Character.getType((char)value); switch (type) { case Character.UPPERCASE_LETTER: case Character.LOWERCASE_LETTER: case Character.TITLECASE_LETTER: case Character.MODIFIER_LETTER: case Character.OTHER_LETTER: case Character.NON_SPACING_MARK: case Character.ENCLOSING_MARK: case Character.COMBINING_SPACING_MARK: case Character.DECIMAL_DIGIT_NUMBER: case Character.LETTER_NUMBER: case Character.OTHER_NUMBER: case Character.DASH_PUNCTUATION: case Character.START_PUNCTUATION: case Character.END_PUNCTUATION: case Character.CONNECTOR_PUNCTUATION: case Character.OTHER_PUNCTUATION: case Character.MATH_SYMBOL: case Character.CURRENCY_SYMBOL: case Character.MODIFIER_SYMBOL: case Character.OTHER_SYMBOL: print(" // '"); print(String.valueOf((char)value)); print("'"); } } }
private void locateLabel(String indent) { int labelKey = mAddress; Object labelValue = mLabels.get(labelKey); if (labelValue == null) { return; } int len = indent.length() - 4; if (len > 0) { print(indent.substring(0, len)); } print(labelValue); println(":"); List<ExceptionHandler> handlers = mCatchLocations.get(labelKey); if (handlers != null) { for (int i=0; i<handlers.size(); i++) { ExceptionHandler handler = handlers.get(i); print(indent, "try ("); print(getLabel(handler.getStartLocation().getLocation())); print(".."); print(getLabel(handler.getEndLocation().getLocation())); print(") catch ("); if (handler.getCatchType() == null) { print("..."); } else { disassemble(handler.getCatchType()); } println(")"); } } }
private void disassemble(String indent, FieldInfo field) { SignatureAttr sig = field.getSignatureAttr(); if (field.isDeprecated() || field.isSynthetic() || sig != null) { println(indent, "/**"); if (field.isDeprecated()) { println(indent, " * @deprecated"); } if (field.isSynthetic()) { println(indent, " * @synthetic"); } if (sig != null) { println(indent, " * @signature " + sig.getSignature().getValue()); } println(indent, " */"); } disassemble(indent, field.getRuntimeVisibleAnnotations()); disassemble(indent, field.getRuntimeInvisibleAnnotations()); print(indent); disassemble(field.getModifiers()); disassemble(field.getType()); print(" "); print(field.getName()); ConstantInfo constant = field.getConstantValue(); if (constant != null) { print(" = "); disassemble(constant); } println(";"); }
private void print(StackMapTableAttr.VerificationTypeInfo[] infos) { print('{'); int num = 0; for (int i=0; i<infos.length; i++) { if (i > 0) { print(", "); } print(num); print('='); StackMapTableAttr.VerificationTypeInfo info = infos[i]; print(info.toString()); if (info.getType() == null || !info.getType().isDoubleWord()) { num += 1; } else { num += 2; } } print('}'); }
switch (mv.getTag()) { default: print("?"); break; case Annotation.MEMBER_TAG_BOOLEAN: ConstantIntegerInfo ci = (ConstantIntegerInfo)value; print(ci.getValue() == 0 ? "false" : "true"); break; case Annotation.MEMBER_TAG_BYTE: break; case Annotation.MEMBER_TAG_CHAR: { print("'"); char c = (char) ((ConstantIntegerInfo)value).getValue(); print(CodeAssemblerPrinter.escape(String.valueOf(c), true)); print("'"); break; print(TypeDesc.forDescriptor(ecv.getTypeName().getValue()).getFullName()); print("."); print(ecv.getConstName().getValue()); break; case Annotation.MEMBER_TAG_ANNOTATION: print("{"); if (multiLine) { println(); print(indent);
private void disassemble(TypeDesc type) { print(type.getFullName()); }
disassemble(indent, method.getRuntimeInvisibleAnnotations()); print(indent); print("static"); } else { Modifiers modifiers = method.getModifiers(); print(md.toMethodSignature(method.getName(), varargs)); for (int i=0; i<exceptions.length; i++) { if (i == 0) { print(indent + " ", "throws "); } else { println(","); print(indent + " ", " "); print(exceptions[i].getFullName());
private void disassemble(String indent, Annotation ann) { print("@"); print(ann.getType().getFullName()); Map mvMap = ann.getMemberValues(); if (mvMap.size() == 0) { return; } print("("); Iterator it = mvMap.entrySet().iterator(); int ordinal = 0; while (it.hasNext()) { if (ordinal++ > 0) { print(", "); } Map.Entry entry = (Map.Entry)it.next(); String name = (String)entry.getKey(); if (!"value".equals(name)) { print(name); print("="); } disassemble(indent, (Annotation.MemberValue)entry.getValue()); } print(")"); }
print(indent, " * Disassembled on "); print(new Date()); println("."); addBreak = true; print(indent, " * @target "); println(CodeAssemblerPrinter.escape(mClassFile.getTarget())); print(indent, " * @source "); println(CodeAssemblerPrinter.escape(mClassFile.getSourceFile())); println(indent, " * @anonymous"); } else { print(indent, " * @name "); println(CodeAssemblerPrinter.escape(mClassFile.getInnerClassName())); print(indent); print("class "); print(mClassFile.getClassName()); print(" extends "); print(mClassFile.getSuperClassName()); for (int i=0; i<interfaces.length; i++) { if (i == 0) { print(innerIndent, "implements "); } else {
private void disassemble(ConstantInfo constant, boolean showClassLiteral) { if (constant instanceof ConstantStringInfo) { print("\""); String value = ((ConstantStringInfo)constant).getValue(); print(CodeAssemblerPrinter.escape(value)); print("\""); } else if (constant instanceof ConstantIntegerInfo) { print(String.valueOf(((ConstantIntegerInfo)constant).getValue())); } else if (constant instanceof ConstantLongInfo) { print(String.valueOf(((ConstantLongInfo)constant).getValue())); print("L"); } else if (constant instanceof ConstantFloatInfo) { float value = ((ConstantFloatInfo)constant).getValue(); if (value != value) { print("0.0f/0.0f"); } else if (value == Float.NEGATIVE_INFINITY) { print("-1.0f/0.0f"); } else if (value == Float.POSITIVE_INFINITY) { print("1.0f/0.0f"); } else { print(String.valueOf(value)); print("f"); print("0.0d/0.0d"); } else if (value == Float.NEGATIVE_INFINITY) { print("-1.0d/0.0d"); } else if (value == Float.POSITIVE_INFINITY) { print("1.0d/0.0d"); } else { print(String.valueOf(value));
private void disassemble(String indent, Annotation[] annotations) { for (int i=0; i<annotations.length; i++) { print(indent); disassemble(indent, annotations[i]); println(); } }
private void print(StackMapTableAttr.VerificationTypeInfo[] infos) { print('{'); int num = 0; for (int i=0; i<infos.length; i++) { if (i > 0) { print(", "); } print(num); print('='); StackMapTableAttr.VerificationTypeInfo info = infos[i]; print(info.toString()); if (info.getType() == null || !info.getType().isDoubleWord()) { num += 1; } else { num += 2; } } print('}'); }
private void disassemble(TypeDesc type) { print(type.getFullName()); }