org.compass.core.util.asm.xml
Class ASMContentHandler

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by org.compass.core.util.asm.xml.ASMContentHandler
All Implemented Interfaces:
Opcodes, ContentHandler, DTDHandler, EntityResolver, ErrorHandler

public class ASMContentHandler
extends DefaultHandler
implements Opcodes

A ContentHandler that transforms XML document into Java class file. This class can be feeded by any kind of SAX 2.0 event producers, e.g. XML parser, XSLT or XPath engines, or custom code.

Author:
Eugene Kuleshov
See Also:
SAXClassAdapter, Processor

Nested Class Summary
protected  class ASMContentHandler.Rule
          Rule
 
Field Summary
protected  boolean computeMax
          true if the maximum stack size and number of local variables must be automatically computed.
protected  ClassWriter cw
          Current instance of the ClassWriter used to write class bytecode.
protected  Map labels
          Map of the active Label instances for current method.
(package private) static Map OPCODES
          Map of the opcode names to opcode and opcode group
protected  OutputStream os
          Output stream to write result bytecode.
 
Fields inherited from interface org.compass.core.util.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, 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_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6
 
Constructor Summary
ASMContentHandler(OutputStream os, boolean computeMax)
          Constructs a new ASMContentHandler object.
 
Method Summary
 void endDocument()
          Process notification of the end of a document and write generated bytecode into output stream.
 void endElement(String ns, String lName, String qName)
          Process notification of the end of an XML element being reached.
(package private)  Object peek()
          Return the top object on the stack without removing it.
(package private)  Object pop()
          Pop the top object off of the stack, and return it.
(package private)  void push(Object object)
          Push a new object onto the top of the object stack.
 void startElement(String ns, String lName, String qName, Attributes list)
          Process notification of the start of an XML element being reached.
 byte[] toByteArray()
          Returns the bytecode of the class that was build with underneath class writer.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
characters, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

computeMax

protected boolean computeMax
true if the maximum stack size and number of local variables must be automatically computed.


os

protected OutputStream os
Output stream to write result bytecode.


cw

protected ClassWriter cw
Current instance of the ClassWriter used to write class bytecode.


labels

protected Map labels
Map of the active Label instances for current method.


OPCODES

static final Map OPCODES
Map of the opcode names to opcode and opcode group

Constructor Detail

ASMContentHandler

public ASMContentHandler(OutputStream os,
                         boolean computeMax)
Constructs a new ASMContentHandler object.

Parameters:
os - output stream to write generated class.
computeMax - true if the maximum stack size and the maximum number of local variables must be automatically computed. This value is passed to ClassWriter instance.
Method Detail

toByteArray

public byte[] toByteArray()
Returns the bytecode of the class that was build with underneath class writer.

Returns:
the bytecode of the class that was build with underneath class writer or null if there are no classwriter created.

startElement

public final void startElement(String ns,
                               String lName,
                               String qName,
                               Attributes list)
                        throws SAXException
Process notification of the start of an XML element being reached.

Specified by:
startElement in interface ContentHandler
Overrides:
startElement in class DefaultHandler
Parameters:
ns - - The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed.
lName - - The local name (without prefix), or the empty string if Namespace processing is not being performed.
qName - - The qualified name (with prefix), or the empty string if qualified names are not available.
list - - The attributes attached to the element. If there are no attributes, it shall be an empty Attributes object.
Throws:
SAXException - if a parsing error is to be reported

endElement

public final void endElement(String ns,
                             String lName,
                             String qName)
                      throws SAXException
Process notification of the end of an XML element being reached.

Specified by:
endElement in interface ContentHandler
Overrides:
endElement in class DefaultHandler
Parameters:
ns - - The Namespace URI, or the empty string if the element has no Namespace URI or if Namespace processing is not being performed.
lName - - The local name (without prefix), or the empty string if Namespace processing is not being performed.
qName - - The qualified XML 1.0 name (with prefix), or the empty string if qualified names are not available.
Throws:
SAXException - if a parsing error is to be reported

endDocument

public final void endDocument()
                       throws SAXException
Process notification of the end of a document and write generated bytecode into output stream.

Specified by:
endDocument in interface ContentHandler
Overrides:
endDocument in class DefaultHandler
Throws:
SAXException - if parsing or writing error is to be reported.

peek

final Object peek()
Return the top object on the stack without removing it. If there are no objects on the stack, return null.

Returns:
the top object on the stack without removing it.

pop

final Object pop()
Pop the top object off of the stack, and return it. If there are no objects on the stack, return null.

Returns:
the top object off of the stack.

push

final void push(Object object)
Push a new object onto the top of the object stack.

Parameters:
object - The new object


Copyright (c) 2004-2008 The Compass Project.