mjc

org.multijava.dis
Class Disassembler

java.lang.Object
  extended byorg.multijava.dis.Disassembler
All Implemented Interfaces:
Constants, Constants

public class Disassembler
extends Object
implements Constants, Constants

This class prints the classfile in ksm syntaxt


Nested Class Summary
static class Disassembler.DisassemblerHelper
          A helper class to tune the disassembler for languages that extend Java, such as JML.
 
Field Summary
protected  ClassInfo classInfo
           
private static Disassembler.DisassemblerHelper helper
           
protected  DisOptions options
           
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Fields inherited from interface org.multijava.dis.Constants
OPT_NO_CODE, OPT_SHOW_STACK, OPT_SORT_MEMBERS, OPT_STDOUT
 
Constructor Summary
protected Disassembler(ClassInfo classInfo, DisOptions options)
          Create a disassembler object from a classinfo
 
Method Summary
private static String convertDoubleLiteral(Double t)
           
(package private) static String convertFieldSignature(String signature)
          Converts a field signature into ksm syntax.
private static String convertFieldSignature(String signature, String staticType)
          Converts a field signature into ksm syntax.
private static String convertFieldSignature(String signature, String staticType, CUniverseTypeAnnotation uta)
          Converts a field signature into ksm syntax.
private static String convertFloatLiteral(Float t)
           
(package private) static String convertLiteral(Object t)
          Converts a literal into ksm syntax.
private static String convertLongLiteral(Long t)
           
(package private) static String[] convertMethodSignature(String signature)
          Converts a method signature into ksm syntax.
(package private) static String[] convertMethodSignature(String signature, CUniverseMethodAnnotation uma)
          Converts a method signature into ksm syntax.
(package private) static String convertQualifiedName(String ident)
          Converts a qualified identifier into ksm syntax.
private static String convertStringLiteral(String t)
           
static void disassemble(String sourceFile, String destination, DisOptions options)
          Disassembles a class file.
protected static void disassemble(String sourceFile, String destination, DisOptions options, Disassembler.DisassemblerHelper helper)
          Disassembles a class file by using the given helper.
private static int findParamDescriptionEnd(int start, String signature)
          Finds the end of the next parameter descriptor in signature starting with the character in position start.
private static boolean isJavaIdentifier(String ident)
           
private static void writeAssemblerFile(ClassInfo classInfo, String destination, DisOptions options, Disassembler.DisassemblerHelper helper)
          Creates a class file from class info
private  void writeClass(IndentingWriter out)
          Prints the class file
private  void writeCodeInfo(IndentingWriter out, CodeInfo info)
          Prints code
private  void writeField(IndentingWriter out, FieldInfo info)
          Prints fields
private  void writeHandlerInfo(IndentingWriter out, CodeInfo info)
          Prints exception handlers
private  void writeInner(IndentingWriter out, InnerClassInfo info)
          Prints inner class info
private  void writeLocalVariableInfo(IndentingWriter out, CodeInfo info)
          Prints local variables
private  void writeMethod(IndentingWriter out, MethodInfo info)
          Prints methods
private  void writeModifiers(IndentingWriter out, long modifiers)
           
protected  void writeModifiers(IndentingWriter out, ClassInfo info)
          Prints the modifiers of the given class info.
protected  void writeModifiers(IndentingWriter out, FieldInfo info)
          Prints the modifiers of the given field info.
protected  void writeModifiers(IndentingWriter out, InnerClassInfo info)
          Prints the modifiers of the given inner class info.
protected  void writeModifiers(IndentingWriter out, MethodInfo info)
          Prints the modifiers of the given method info.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

helper

private static final Disassembler.DisassemblerHelper helper

classInfo

protected final ClassInfo classInfo

options

protected final DisOptions options
Constructor Detail

Disassembler

protected Disassembler(ClassInfo classInfo,
                       DisOptions options)
Create a disassembler object from a classinfo

Method Detail

disassemble

public static void disassemble(String sourceFile,
                               String destination,
                               DisOptions options)
                        throws UnpositionedError
Disassembles a class file.

Throws:
UnpositionedError

disassemble

protected static void disassemble(String sourceFile,
                                  String destination,
                                  DisOptions options,
                                  Disassembler.DisassemblerHelper helper)
                           throws UnpositionedError
Disassembles a class file by using the given helper.

Throws:
UnpositionedError

writeAssemblerFile

private static void writeAssemblerFile(ClassInfo classInfo,
                                       String destination,
                                       DisOptions options,
                                       Disassembler.DisassemblerHelper helper)
                                throws UnpositionedError
Creates a class file from class info

Throws:
UnpositionedError

writeModifiers

protected void writeModifiers(IndentingWriter out,
                              ClassInfo info)
Prints the modifiers of the given class info. Factored out to allow subclasses to print non-Java modifiers, e.g., those of JML.


writeModifiers

protected void writeModifiers(IndentingWriter out,
                              FieldInfo info)
Prints the modifiers of the given field info. Factored out to allow subclasses to print non-Java modifiers, e.g., those of JML.


writeModifiers

protected void writeModifiers(IndentingWriter out,
                              MethodInfo info)
Prints the modifiers of the given method info. Factored out to allow subclasses to print non-Java modifiers, e.g., those of JML.


writeModifiers

protected void writeModifiers(IndentingWriter out,
                              InnerClassInfo info)
Prints the modifiers of the given inner class info. Factored out to allow subclasses to print non-Java modifiers, e.g., those of JML.


writeClass

private void writeClass(IndentingWriter out)
Prints the class file


writeInner

private void writeInner(IndentingWriter out,
                        InnerClassInfo info)
Prints inner class info


writeField

private void writeField(IndentingWriter out,
                        FieldInfo info)
Prints fields


writeMethod

private void writeMethod(IndentingWriter out,
                         MethodInfo info)
Prints methods


writeCodeInfo

private void writeCodeInfo(IndentingWriter out,
                           CodeInfo info)
Prints code


writeModifiers

private void writeModifiers(IndentingWriter out,
                            long modifiers)

writeHandlerInfo

private void writeHandlerInfo(IndentingWriter out,
                              CodeInfo info)
Prints exception handlers


writeLocalVariableInfo

private void writeLocalVariableInfo(IndentingWriter out,
                                    CodeInfo info)
Prints local variables


convertFieldSignature

static String convertFieldSignature(String signature)
Converts a field signature into ksm syntax.

Parameters:
signature - the signature to convert.
Returns:
a string in ksm syntax.

convertFieldSignature

private static String convertFieldSignature(String signature,
                                            String staticType)
Converts a field signature into ksm syntax.

Parameters:
signature - the signature to convert.
staticType - the name of the associated static type, if this signature represents a value specializer
Returns:
a string in ksm syntax.

convertFieldSignature

private static String convertFieldSignature(String signature,
                                            String staticType,
                                            CUniverseTypeAnnotation uta)
Converts a field signature into ksm syntax.

Parameters:
signature - the signature to convert.
staticType - the name of the associated static type, if this signature represents a value specializer
Returns:
a string in ksm syntax.

convertMethodSignature

static String[] convertMethodSignature(String signature)
Converts a method signature into ksm syntax.

Parameters:
signature - the signature to convert.
Returns:
an array of two string in ksm syntax: element 0: the argument types element 1: the return type

convertMethodSignature

static String[] convertMethodSignature(String signature,
                                       CUniverseMethodAnnotation uma)
Converts a method signature into ksm syntax. Prints universe annotations for argument and return types.

Parameters:
signature - the signature to convert
uma - the method's universe annotation
Returns:
an array of two strings in ksm syntax: element 0: the argument types element 1: the return type

findParamDescriptionEnd

private static int findParamDescriptionEnd(int start,
                                           String signature)
Finds the end of the next parameter descriptor in signature starting with the character in position start.


convertQualifiedName

static String convertQualifiedName(String ident)
Converts a qualified identifier into ksm syntax.

Parameters:
ident - the identifier to convert.
Returns:
a string in ksm syntax.

isJavaIdentifier

private static boolean isJavaIdentifier(String ident)

convertLiteral

static String convertLiteral(Object t)
Converts a literal into ksm syntax.


convertDoubleLiteral

private static String convertDoubleLiteral(Double t)

convertFloatLiteral

private static String convertFloatLiteral(Float t)

convertLongLiteral

private static String convertLongLiteral(Long t)

convertStringLiteral

private static String convertStringLiteral(String t)

mjc

mjc is Copyright (C) 2000-2004 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.