
org.enhydra.xml.xmlc.deferredparsing.DynamicMLCreatorASM2Impl Maven / Gradle / Ivy
The newest version!
package org.enhydra.xml.xmlc.deferredparsing;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class DynamicMLCreatorASM2Impl implements Opcodes, DynamicMLCreator {
private String className;
private String LclassName;
private String LclassNameV;
private String sourcePath;
private String superClass;
private String implInterfaces[];
private String mimeType;
private String encoding;
public byte[] getByteArrayForClass() {
byte[] ret = null;
try {
ret = dump();
} catch (Exception e) {
;
}
return ret;
}
public DynamicMLCreatorASM2Impl(String name, String path) {
className = name.replace('.', '/');
LclassName = "L" + className + ";";
LclassNameV = "(" + LclassName + ")V";
sourcePath = path;
String type = (path.endsWith(".html") || path.endsWith(".htm") || path.endsWith(".xhtml") || path
.endsWith(".chtml")) ? "html" : "xml";
if (type.equals("html")) {
// xhtml is actually xml, but generated xhtml classes look like
// this rather than the xml below, so including xhtml for this
// definition
superClass = "org/enhydra/xml/xmlc/html/HTMLObjectImpl";
implInterfaces = new String[] { "org/enhydra/xml/xmlc/XMLObject", "org/enhydra/xml/xmlc/html/HTMLObject" };
mimeType = "text/html";
encoding = "ISO-8859-1";
} else {
superClass = "org/enhydra/xml/xmlc/XMLObjectImpl";
implInterfaces = new String[] { "org/enhydra/xml/xmlc/XMLObject" };
mimeType = "text/xml";
encoding = "UTF-8";
}
}
private byte[] dump() throws Exception {
ClassWriter cw = new ClassWriter(false);
FieldVisitor fv;
MethodVisitor mv;
cw.visit(V1_2, ACC_PUBLIC + ACC_SUPER, className, null, superClass, implInterfaces);
cw.visitSource("", null);
{
fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "XMLC_GENERATED_CLASS", "Ljava/lang/Class;", null,
null);
fv.visitEnd();
}
{
fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, "XMLC_SOURCE_FILE", "Ljava/lang/String;", null,
sourcePath);
fv.visitEnd();
}
{
fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "fDOMFactory",
"Lorg/enhydra/xml/xmlc/dom/XMLCDomFactory;", null, null);
fv.visitEnd();
}
{
fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, "fDocumentLoader",
"Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;", null, null);
fv.visitEnd();
}
{
fv = cw.visitField(ACC_STATIC + ACC_SYNTHETIC, "class$0", "Ljava/lang/Class;", null, null);
fv.visitEnd();
}
{
fv = cw.visitField(ACC_STATIC + ACC_SYNTHETIC, "class$1", "Ljava/lang/Class;", null, null);
fv.visitEnd();
}
{
mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(22, l0);
mv.visitFieldInsn(GETSTATIC, className, "class$0", "Ljava/lang/Class;");
mv.visitInsn(DUP);
Label l1 = new Label();
mv.visitJumpInsn(IFNONNULL, l1);
mv.visitInsn(POP);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLdcInsn(className.replace('/', '.'));
mv.visitMethodInsn(INVOKESTATIC, "java/lang/Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;");
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitInsn(DUP);
mv.visitFieldInsn(PUTSTATIC, className, "class$0", "Ljava/lang/Class;");
mv.visitJumpInsn(GOTO, l1);
Label l4 = new Label();
mv.visitLabel(l4);
mv.visitTypeInsn(NEW, "java/lang/NoClassDefFoundError");
mv.visitInsn(DUP_X1);
mv.visitInsn(SWAP);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Throwable", "getMessage", "()Ljava/lang/String;");
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/NoClassDefFoundError", "", "(Ljava/lang/String;)V");
mv.visitInsn(ATHROW);
mv.visitLabel(l1);
mv.visitFieldInsn(PUTSTATIC, className, "XMLC_GENERATED_CLASS", "Ljava/lang/Class;");
Label l5 = new Label();
mv.visitLabel(l5);
mv.visitLineNumber(33, l5);
mv.visitFieldInsn(GETSTATIC, className, "class$1", "Ljava/lang/Class;");
mv.visitInsn(DUP);
Label l6 = new Label();
mv.visitJumpInsn(IFNONNULL, l6);
mv.visitInsn(POP);
Label l7 = new Label();
mv.visitLabel(l7);
mv.visitLdcInsn("org.enhydra.xml.xmlc.dom.xerces.XercesHTMLDomFactory");
mv.visitMethodInsn(INVOKESTATIC, "java/lang/Class", "forName", "(Ljava/lang/String;)Ljava/lang/Class;");
Label l8 = new Label();
mv.visitLabel(l8);
mv.visitInsn(DUP);
mv.visitFieldInsn(PUTSTATIC, className, "class$1", "Ljava/lang/Class;");
mv.visitJumpInsn(GOTO, l6);
Label l9 = new Label();
mv.visitLabel(l9);
mv.visitTypeInsn(NEW, "java/lang/NoClassDefFoundError");
mv.visitInsn(DUP_X1);
mv.visitInsn(SWAP);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Throwable", "getMessage", "()Ljava/lang/String;");
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/NoClassDefFoundError", "", "(Ljava/lang/String;)V");
mv.visitInsn(ATHROW);
mv.visitLabel(l6);
mv.visitMethodInsn(INVOKESTATIC, "org/enhydra/xml/xmlc/dom/XMLCDomFactoryCache", "getFactory",
"(Ljava/lang/Class;)Lorg/enhydra/xml/xmlc/dom/XMLCDomFactory;");
mv.visitFieldInsn(PUTSTATIC, className, "fDOMFactory", "Lorg/enhydra/xml/xmlc/dom/XMLCDomFactory;");
Label l10 = new Label();
mv.visitLabel(l10);
mv.visitLineNumber(17, l10);
mv.visitInsn(RETURN);
mv.visitTryCatchBlock(l2, l3, l4, "java/lang/ClassNotFoundException");
mv.visitTryCatchBlock(l7, l8, l9, "java/lang/ClassNotFoundException");
mv.visitMaxs(3, 0);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(44, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "org/enhydra/xml/xmlc/deferredparsing/StandardDocumentLoader",
"getInstance", "()Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
mv.visitMethodInsn(INVOKESPECIAL, className, "",
"(Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;)V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(46, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "buildDocument", "()V");
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLineNumber(48, l2);
mv.visitInsn(RETURN);
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitLocalVariable("this", LclassName, null, l0, l3, 0);
mv.visitMaxs(2, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "", "(Z)V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(54, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESTATIC, "org/enhydra/xml/xmlc/deferredparsing/StandardDocumentLoader",
"getInstance", "()Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
mv.visitVarInsn(ILOAD, 1);
mv.visitMethodInsn(INVOKESPECIAL, className, "",
"(Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;Z)V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(56, l1);
mv.visitInsn(RETURN);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLocalVariable("this", LclassName, null, l0, l2, 0);
mv.visitLocalVariable("buildDOM", "Z", null, l0, l2, 1);
mv.visitMaxs(3, 2);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "", LclassNameV, null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(61, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, superClass, "", "()V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(62, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "getDocumentLoader",
"()Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
mv.visitFieldInsn(PUTFIELD, className, "fDocumentLoader",
"Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLineNumber(64, l2);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "getDocument", "()Lorg/w3c/dom/Document;");
mv.visitInsn(ICONST_1);
mv.visitMethodInsn(INVOKEINTERFACE, "org/w3c/dom/Document", "cloneNode", "(Z)Lorg/w3c/dom/Node;");
mv.visitTypeInsn(CHECKCAST, "org/w3c/dom/Document");
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "getMIMEType", "()Ljava/lang/String;");
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "getEncoding", "()Ljava/lang/String;");
mv.visitMethodInsn(INVOKEVIRTUAL, className, "setDocument",
"(Lorg/w3c/dom/Document;Ljava/lang/String;Ljava/lang/String;)V");
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitLineNumber(66, l3);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "syncAccessMethods", "()V");
Label l4 = new Label();
mv.visitLabel(l4);
mv.visitLineNumber(68, l4);
mv.visitInsn(RETURN);
Label l5 = new Label();
mv.visitLabel(l5);
mv.visitLocalVariable("this", LclassName, null, l0, l5, 0);
mv.visitLocalVariable("src", LclassName, null, l0, l5, 1);
mv.visitMaxs(4, 2);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "", "(Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;Z)V",
null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(75, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, superClass, "", "()V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(77, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(PUTFIELD, className, "fDocumentLoader",
"Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLineNumber(79, l2);
mv.visitVarInsn(ILOAD, 2);
Label l3 = new Label();
mv.visitJumpInsn(IFEQ, l3);
Label l4 = new Label();
mv.visitLabel(l4);
mv.visitLineNumber(81, l4);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "buildDocument", "()V");
mv.visitLabel(l3);
mv.visitLineNumber(85, l3);
mv.visitInsn(RETURN);
Label l5 = new Label();
mv.visitLabel(l5);
mv.visitLocalVariable("this", LclassName, null, l0, l5, 0);
mv.visitLocalVariable("loader", "Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;", null, l0, l5, 1);
mv.visitLocalVariable("buildDOM", "Z", null, l0, l5, 2);
mv.visitMaxs(2, 3);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "", "(Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;)V", null,
null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(93, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitInsn(ICONST_1);
mv.visitMethodInsn(INVOKESPECIAL, className, "",
"(Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;Z)V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(95, l1);
mv.visitInsn(RETURN);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLocalVariable("this", LclassName, null, l0, l2, 0);
mv.visitLocalVariable("loader", "Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;", null, l0, l2, 1);
mv.visitMaxs(3, 2);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "buildDocument", "()V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(101, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "getDocumentLoader",
"()Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
mv.visitMethodInsn(INVOKEINTERFACE, "org/enhydra/xml/xmlc/deferredparsing/DocumentLoader", "getDocument",
"(Ljava/lang/Class;)Lorg/w3c/dom/Document;");
mv.visitLdcInsn(mimeType);
mv.visitLdcInsn(encoding);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "setDocument",
"(Lorg/w3c/dom/Document;Ljava/lang/String;Ljava/lang/String;)V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(103, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "syncAccessMethods", "()V");
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLineNumber(105, l2);
mv.visitInsn(RETURN);
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitLocalVariable("this", LclassName, null, l0, l3, 0);
mv.visitMaxs(4, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PUBLIC, "cloneNode", "(Z)Lorg/w3c/dom/Node;", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(111, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ILOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "cloneDeepCheck", "(Z)V");
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLineNumber(113, l1);
mv.visitTypeInsn(NEW, className);
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, className, "", LclassNameV);
mv.visitInsn(ARETURN);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLocalVariable("this", LclassName, null, l0, l2, 0);
mv.visitLocalVariable("deep", "Z", null, l0, l2, 1);
mv.visitMaxs(3, 2);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PROTECTED + ACC_FINAL, "getDocumentLoader",
"()Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(121, l0);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, className, "fDocumentLoader",
"Lorg/enhydra/xml/xmlc/deferredparsing/DocumentLoader;");
mv.visitInsn(ARETURN);
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLocalVariable("this", LclassName, null, l0, l1, 0);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PROTECTED + ACC_FINAL, "getDomFactory",
"()Lorg/enhydra/xml/xmlc/dom/XMLCDomFactory;", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(129, l0);
mv.visitFieldInsn(GETSTATIC, className, "fDOMFactory", "Lorg/enhydra/xml/xmlc/dom/XMLCDomFactory;");
mv.visitInsn(ARETURN);
Label l1 = new Label();
mv.visitLabel(l1);
mv.visitLocalVariable("this", LclassName, null, l0, l1, 0);
mv.visitMaxs(1, 1);
mv.visitEnd();
}
{
mv = cw.visitMethod(ACC_PROTECTED, "syncWithDocument", "(Lorg/w3c/dom/Node;)V", null, null);
mv.visitCode();
Label l0 = new Label();
mv.visitLabel(l0);
mv.visitLineNumber(138, l0);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(INSTANCEOF, "org/w3c/dom/Element");
Label l1 = new Label();
mv.visitJumpInsn(IFEQ, l1);
Label l2 = new Label();
mv.visitLabel(l2);
mv.visitLineNumber(140, l2);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(CHECKCAST, "org/w3c/dom/Element");
mv.visitLdcInsn("id");
mv.visitMethodInsn(INVOKEINTERFACE, "org/w3c/dom/Element", "getAttribute",
"(Ljava/lang/String;)Ljava/lang/String;");
mv.visitVarInsn(ASTORE, 2);
Label l3 = new Label();
mv.visitLabel(l3);
mv.visitLineNumber(142, l3);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "length", "()I");
mv.visitInsn(POP);
mv.visitLabel(l1);
mv.visitLineNumber(148, l1);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEINTERFACE, "org/w3c/dom/Node", "getFirstChild", "()Lorg/w3c/dom/Node;");
mv.visitVarInsn(ASTORE, 2);
Label l4 = new Label();
mv.visitLabel(l4);
mv.visitLineNumber(150, l4);
Label l5 = new Label();
mv.visitJumpInsn(GOTO, l5);
Label l6 = new Label();
mv.visitLabel(l6);
mv.visitLineNumber(152, l6);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, className, "syncWithDocument", "(Lorg/w3c/dom/Node;)V");
Label l7 = new Label();
mv.visitLabel(l7);
mv.visitLineNumber(154, l7);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEINTERFACE, "org/w3c/dom/Node", "getNextSibling", "()Lorg/w3c/dom/Node;");
mv.visitVarInsn(ASTORE, 2);
mv.visitLabel(l5);
mv.visitLineNumber(150, l5);
mv.visitVarInsn(ALOAD, 2);
mv.visitJumpInsn(IFNONNULL, l6);
Label l8 = new Label();
mv.visitLabel(l8);
mv.visitLineNumber(158, l8);
mv.visitInsn(RETURN);
Label l9 = new Label();
mv.visitLabel(l9);
mv.visitLocalVariable("this", LclassName, null, l0, l9, 0);
mv.visitLocalVariable("node", "Lorg/w3c/dom/Node;", null, l0, l9, 1);
mv.visitLocalVariable("id", "Ljava/lang/String;", null, l3, l1, 2);
mv.visitLocalVariable("child", "Lorg/w3c/dom/Node;", null, l4, l9, 2);
mv.visitMaxs(2, 3);
mv.visitEnd();
}
cw.visitEnd();
return cw.toByteArray();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy