Krakatau bug fix
This commit is contained in:
parent
870987f65f
commit
bd0938476c
10 changed files with 3 additions and 916 deletions
|
@ -1,48 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
Provides some useful class and method adapters. <i>The preferred way of using
|
|
||||||
these adapters is by chaining them together and to custom adapters (instead of
|
|
||||||
inheriting from them)</i>. Indeed this approach provides more combination
|
|
||||||
possibilities than inheritance. For instance, suppose you want to implement an
|
|
||||||
adapter MyAdapter than needs sorted local variables and intermediate stack map
|
|
||||||
frame values taking into account the local variables sort. By using inheritance,
|
|
||||||
this would require MyAdapter to extend AnalyzerAdapter, itself extending
|
|
||||||
LocalVariablesSorter. But AnalyzerAdapter is not a subclass of
|
|
||||||
LocalVariablesSorter, so this is not possible. On the contrary, by using
|
|
||||||
delegation, you can make LocalVariablesSorter delegate to AnalyzerAdapter,
|
|
||||||
itself delegating to MyAdapter. In this case AnalyzerAdapter computes
|
|
||||||
intermediate frames based on the output of LocalVariablesSorter, and MyAdapter
|
|
||||||
can add new locals by calling the newLocal method on LocalVariablesSorter, and
|
|
||||||
can get the stack map frame state before each instruction by reading the locals
|
|
||||||
and stack fields in AnalyzerAdapter (this requires references from MyAdapter
|
|
||||||
back to LocalVariablesSorter and AnalyzerAdapter).
|
|
||||||
</body>
|
|
|
@ -1,87 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
Provides a small and fast bytecode manipulation framework.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The <a href="http://www.objectweb.org/asm">ASM</a> framework is organized
|
|
||||||
around the {@link org.objectweb.asm.ClassVisitor ClassVisitor},
|
|
||||||
{@link org.objectweb.asm.FieldVisitor FieldVisitor},
|
|
||||||
{@link org.objectweb.asm.MethodVisitor MethodVisitor} and
|
|
||||||
{@link org.objectweb.asm.AnnotationVisitor AnnotationVisitor} abstract classes,
|
|
||||||
which allow one to visit the fields, methods and annotations of a class,
|
|
||||||
including the bytecode instructions of each method.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In addition to these main abstract classes, ASM provides a {@link
|
|
||||||
org.objectweb.asm.ClassReader ClassReader} class, that can parse an
|
|
||||||
existing class and make a given visitor visit it. ASM also provides
|
|
||||||
a {@link org.objectweb.asm.ClassWriter ClassWriter} class, which is
|
|
||||||
a visitor that generates Java class files.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In order to generate a class from scratch, only the {@link
|
|
||||||
org.objectweb.asm.ClassWriter ClassWriter} class is necessary. Indeed,
|
|
||||||
in order to generate a class, one must just call its visit<i>Xxx</i>
|
|
||||||
methods with the appropriate arguments to generate the desired fields
|
|
||||||
and methods. See the "helloworld" example in the ASM distribution for
|
|
||||||
more details about class generation.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In order to modify existing classes, one must use a {@link
|
|
||||||
org.objectweb.asm.ClassReader ClassReader} class to analyze
|
|
||||||
the original class, a class modifier, and a {@link org.objectweb.asm.ClassWriter
|
|
||||||
ClassWriter} to construct the modified class. The class modifier
|
|
||||||
is just a {@link org.objectweb.asm.ClassVisitor ClassVisitor}
|
|
||||||
that delegates most of the work to another {@link org.objectweb.asm.ClassVisitor
|
|
||||||
ClassVisitor}, but that sometimes changes some parameter values,
|
|
||||||
or call additional methods, in order to implement the desired
|
|
||||||
modification process. In order to make it easier to implement such
|
|
||||||
class modifiers, the {@link org.objectweb.asm.ClassVisitor
|
|
||||||
ClassVisitor} and {@link org.objectweb.asm.MethodVisitor MethodVisitor}
|
|
||||||
classes delegate by default all the method calls they receive to an
|
|
||||||
optional visitor. See the "adapt" example in the ASM
|
|
||||||
distribution for more details about class modification.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The size of the core ASM library, <tt>asm.jar</tt>, is only 45KB, which is much
|
|
||||||
smaller than the size of the
|
|
||||||
<a href="http://jakarta.apache.org/bcel">BCEL</a> library (504KB), and than the
|
|
||||||
size of the
|
|
||||||
<a href="http://serp.sourceforge.net">SERP</a> library (150KB). ASM is also
|
|
||||||
much faster than these tools. Indeed the overhead of a load time class
|
|
||||||
transformation process is of the order of 60% with ASM, 700% or more with BCEL,
|
|
||||||
and 1100% or more with SERP (see the <tt>test/perf</tt> directory in the ASM
|
|
||||||
distribution)!
|
|
||||||
|
|
||||||
@since ASM 1.3
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,36 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
Provides support for type signatures.
|
|
||||||
|
|
||||||
@since ASM 2.0
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,67 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Provides a framework for static code analysis based on the asm.tree package.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Basic usage:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
ClassReader cr = new ClassReader(bytecode);
|
|
||||||
ClassNode cn = new ClassNode();
|
|
||||||
cr.accept(cn, ClassReader.SKIP_DEBUG);
|
|
||||||
|
|
||||||
List methods = cn.methods;
|
|
||||||
for (int i = 0; i < methods.size(); ++i) {
|
|
||||||
MethodNode method = (MethodNode) methods.get(i);
|
|
||||||
if (method.instructions.size() > 0) {
|
|
||||||
Analyzer a = new Analyzer(new BasicInterpreter());
|
|
||||||
a.analyze(cn.name, method);
|
|
||||||
Frame[] frames = a.getFrames();
|
|
||||||
// Elements of the frames arrray now contains info for each instruction
|
|
||||||
// from the analyzed method. BasicInterpreter creates BasicValue, that
|
|
||||||
// is using simplified type system that distinguishes the UNINITIALZED,
|
|
||||||
// INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types.
|
|
||||||
...
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
@since ASM 1.4.3
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,192 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Provides an ASM visitor that constructs a tree representation of the
|
|
||||||
classes it visits. This class adapter can be useful to implement "complex"
|
|
||||||
class manipulation operations, i.e., operations that would be very hard to
|
|
||||||
implement without using a tree representation (such as optimizing the number
|
|
||||||
of local variables used by a method).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
However, this class adapter has a cost: it makes ASM bigger and slower. Indeed
|
|
||||||
it requires more than twenty new classes, and multiplies the time needed to
|
|
||||||
transform a class by almost two (it is almost two times faster to read, "modify"
|
|
||||||
and write a class with a ClassVisitor than with a ClassNode). This is why
|
|
||||||
this package is bundled in an optional <tt>asm-tree.jar</tt> library that
|
|
||||||
is separated from (but requires) the <tt>asm.jar</tt> library, which contains
|
|
||||||
the core ASM framework. This is also why <i><font color="red">it is recommended
|
|
||||||
not to use this class adapter when it is possible</font></i>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The root class is the ClassNode, that can be created from existing bytecode. For example:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
ClassReader cr = new ClassReader(source);
|
|
||||||
ClassNode cn = new ClassNode();
|
|
||||||
cr.accept(cn, true);
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Now the content of ClassNode can be modified and then
|
|
||||||
serialized back into bytecode:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
ClassWriter cw = new ClassWriter(true);
|
|
||||||
cn.accept(cw);
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Using a simple ClassVisitor it is possible to create MethodNode instances per-method.
|
|
||||||
In this example MethodNode is acting as a buffer that is flushed out at visitEnd() call:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
ClassReader cr = new ClassReader(source);
|
|
||||||
ClassWriter cw = new ClassWriter();
|
|
||||||
ClassVisitor cv = new ClassVisitor(cw) {
|
|
||||||
public MethodVisitor visitMethod(int access, String name,
|
|
||||||
String desc, String signature, String[] exceptions) {
|
|
||||||
final MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
|
|
||||||
MethodNode mn = new MethodNode(access, name, desc, signature, exceptions) {
|
|
||||||
public void visitEnd() {
|
|
||||||
// transform or analyze method code using tree API
|
|
||||||
accept(mv);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
cr.accept(cv, true);
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Several strategies can be used to construct method code from scratch. The first
|
|
||||||
option is to create a MethodNode, and then create XxxInsnNode instances and
|
|
||||||
add them to the instructions list:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
MethodNode m = new MethodNode(...);
|
|
||||||
m.instructions.add(new VarInsnNode(ALOAD, 0));
|
|
||||||
...
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Alternatively, you can use the fact that MethodNode is a MethodVisitor, and use
|
|
||||||
that to create the XxxInsnNode and add them to the instructions list through
|
|
||||||
the standard MethodVisitor methods:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
MethodNode m = new MethodNode(...);
|
|
||||||
m.visitVarInsn(ALOAD, 0);
|
|
||||||
...
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you cannot generate all the instructions in sequential order, i.e. if you
|
|
||||||
need to save some pointer in the instruction list and then insert instructions
|
|
||||||
at that place after other instructions have been generated, you can use InsnList
|
|
||||||
methods insert() and insertBefore() to insert instructions at a saved pointer.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
MethodNode m = new MethodNode(...);
|
|
||||||
m.visitVarInsn(ALOAD, 0);
|
|
||||||
AbstractInsnNode ptr = m.instructions.getLast();
|
|
||||||
m.visitVarInsn(ALOAD, 1);
|
|
||||||
// inserts an instruction between ALOAD 0 and ALOAD 1
|
|
||||||
m.instructions.insert(ptr, new VarInsnNode(ALOAD, 0));
|
|
||||||
...
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you need to insert instructions while iterating over an existing instruction
|
|
||||||
list, you can also use several strategies. The first one is to use a
|
|
||||||
ListIterator over the instruction list:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
ListIterator it = m.instructions.iterator();
|
|
||||||
while (it.hasNext()) {
|
|
||||||
AbstractInsnNode n = (AbstractInsnNode) it.next();
|
|
||||||
if (...) {
|
|
||||||
it.add(new VarInsnNode(ALOAD, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
It is also possible to convert an instruction list into an array and iterate trough
|
|
||||||
array elements:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
AbstractInsnNode[] insns = m.instructions.toArray();
|
|
||||||
for(int i = 0; i<insns.length; i++) {
|
|
||||||
AbstractInsnNode n = insns[i];
|
|
||||||
if (...) {
|
|
||||||
m.instructions.insert(n, new VarInsnNode(ALOAD, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you want to insert these instructions through the MethodVisitor methods,
|
|
||||||
you can use another instance of MethodNode as a MethodVisitor and then
|
|
||||||
insert instructions collected by that instance into the instruction list.
|
|
||||||
For example:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
AbstractInsnNode[] insns = m.instructions.toArray();
|
|
||||||
for(int i = 0; i<insns.length; i++) {
|
|
||||||
AbstractInsnNode n = insns[i];
|
|
||||||
if (...) {
|
|
||||||
MethodNode mn = new MethodNode();
|
|
||||||
mn.visitVarInsn(ALOAD, 0);
|
|
||||||
mn.visitVarInsn(ALOAD, 1);
|
|
||||||
m.instructions.insert(n, mn.instructions);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
@since ASM 1.3.3
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,40 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
* Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
Provides ASM visitors that can be useful for programming and
|
|
||||||
debugging purposes. These class visitors are normally not used by applications
|
|
||||||
at runtime. This is why they are bundled in an optional <tt>asm-util.jar</tt>
|
|
||||||
library that is separated from (but requires) the <tt>asm.jar</tt> library,
|
|
||||||
which contains the core ASM framework.
|
|
||||||
|
|
||||||
@since ASM 1.3.2
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,349 +0,0 @@
|
||||||
<!--
|
|
||||||
ASM XML Adapter
|
|
||||||
Copyright (c) 2004-2011, Eugene Kuleshov
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
3. Neither the name of the copyright holders nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
This DTD must be used to create XML documents to be processed by
|
|
||||||
org.objectweb.asm.xml.ASMContentHandler
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Root element used to aggregate multiple classes into single document.
|
|
||||||
-->
|
|
||||||
<!ELEMENT classes ( class+ )>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Root element for a single class.
|
|
||||||
-->
|
|
||||||
<!ELEMENT class ( interfaces, ( field | innerclass | method )*)>
|
|
||||||
<!ATTLIST class access CDATA #REQUIRED>
|
|
||||||
<!ATTLIST class name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST class parent CDATA #REQUIRED>
|
|
||||||
<!ATTLIST class major CDATA #REQUIRED>
|
|
||||||
<!ATTLIST class minor CDATA #REQUIRED>
|
|
||||||
<!ATTLIST class source CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT interfaces ( interface* )>
|
|
||||||
<!ELEMENT interface EMPTY>
|
|
||||||
<!ATTLIST interface name CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT field EMPTY>
|
|
||||||
<!ATTLIST field access CDATA #REQUIRED>
|
|
||||||
<!ATTLIST field desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST field name CDATA #REQUIRED>
|
|
||||||
<!--
|
|
||||||
All characters out of interval 0x20 to 0x7f (inclusive) must
|
|
||||||
be encoded (\uXXXX) and character '\' must be replaced by "\\"
|
|
||||||
-->
|
|
||||||
<!ATTLIST field value CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT innerclass EMPTY>
|
|
||||||
<!ATTLIST innerclass access CDATA #REQUIRED>
|
|
||||||
<!ATTLIST innerclass innerName CDATA #IMPLIED>
|
|
||||||
<!ATTLIST innerclass name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST innerclass outerName CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Root element for method definition.
|
|
||||||
-->
|
|
||||||
<!ELEMENT method ( exceptions, code? )>
|
|
||||||
<!ATTLIST method access CDATA #REQUIRED>
|
|
||||||
<!ATTLIST method desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST method name CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT exceptions ( exception* )>
|
|
||||||
<!ELEMENT exception EMPTY>
|
|
||||||
<!ATTLIST exception name CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
code element contains bytecode instructions and definitions for labels, line numbers, try/catch and max
|
|
||||||
-->
|
|
||||||
<!ELEMENT code (( AALOAD | AASTORE | 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 | DREM | DRETURN | DSTORE | DSUB | DUP | DUP2 | DUP2_X1 | DUP2_X2 | DUP_X1 | DUP_X2 | SWAP | F2D | F2I | F2L | FADD | FALOAD | FASTORE | FCMPG | FCMPL | FCONST_0 | FCONST_1 | FCONST_2 | FDIV | FLOAD | 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 | IFEQ | IFGE | IFGT | IFLE | IFLT | IFNE | IFNONNULL | IFNULL | IF_ACMPEQ | IF_ACMPNE | IF_ICMPEQ | IF_ICMPGE | IF_ICMPGT | IF_ICMPLE | IF_ICMPLT | IF_ICMPNE | IINC | ILOAD | IMUL | INEG | INSTANCEOF | 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 | LOOKUPSWITCH | LOR | LREM | LRETURN | LSHL | LSHR | LSTORE | LSUB | LUSHR | LXOR | MONITORENTER | MONITOREXIT | MULTIANEWARRAY | NEW | NEWARRAY | NOP | POP | POP2 | PUTFIELD | PUTSTATIC | RET | RETURN | SALOAD | SASTORE | SIPUSH | TABLESWITCH | Label | LineNumber | TryCatch )*, Max)>
|
|
||||||
|
|
||||||
<!ELEMENT Label EMPTY>
|
|
||||||
<!ATTLIST Label name CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT TryCatch EMPTY>
|
|
||||||
<!ATTLIST TryCatch end CDATA #REQUIRED>
|
|
||||||
<!ATTLIST TryCatch handler CDATA #REQUIRED>
|
|
||||||
<!ATTLIST TryCatch start CDATA #REQUIRED>
|
|
||||||
<!ATTLIST TryCatch type CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!ELEMENT LineNumber EMPTY>
|
|
||||||
<!ATTLIST LineNumber line CDATA #REQUIRED>
|
|
||||||
<!ATTLIST LineNumber start CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT Max EMPTY>
|
|
||||||
<!ATTLIST Max maxLocals CDATA #REQUIRED>
|
|
||||||
<!ATTLIST Max maxStack CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT AALOAD EMPTY>
|
|
||||||
<!ELEMENT AASTORE EMPTY>
|
|
||||||
<!ELEMENT ACONST_NULL EMPTY>
|
|
||||||
<!ELEMENT ALOAD EMPTY>
|
|
||||||
<!ATTLIST ALOAD var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT ANEWARRAY EMPTY>
|
|
||||||
<!ATTLIST ANEWARRAY desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT ARETURN EMPTY>
|
|
||||||
<!ELEMENT ARRAYLENGTH EMPTY>
|
|
||||||
<!ELEMENT ASTORE EMPTY>
|
|
||||||
<!ATTLIST ASTORE var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT ATHROW EMPTY>
|
|
||||||
<!ELEMENT BALOAD EMPTY>
|
|
||||||
<!ELEMENT BASTORE EMPTY>
|
|
||||||
<!ELEMENT BIPUSH EMPTY>
|
|
||||||
<!ATTLIST BIPUSH value CDATA #REQUIRED>
|
|
||||||
<!ELEMENT CALOAD EMPTY>
|
|
||||||
<!ELEMENT CASTORE EMPTY>
|
|
||||||
<!ELEMENT CHECKCAST EMPTY>
|
|
||||||
<!ATTLIST CHECKCAST desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT D2F EMPTY>
|
|
||||||
<!ELEMENT D2I EMPTY>
|
|
||||||
<!ELEMENT D2L EMPTY>
|
|
||||||
<!ELEMENT DADD EMPTY>
|
|
||||||
<!ELEMENT DALOAD EMPTY>
|
|
||||||
<!ELEMENT DASTORE EMPTY>
|
|
||||||
<!ELEMENT DCMPG EMPTY>
|
|
||||||
<!ELEMENT DCMPL EMPTY>
|
|
||||||
<!ELEMENT DCONST_0 EMPTY>
|
|
||||||
<!ELEMENT DCONST_1 EMPTY>
|
|
||||||
<!ELEMENT DDIV EMPTY>
|
|
||||||
<!ELEMENT DLOAD EMPTY>
|
|
||||||
<!ATTLIST DLOAD var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT DMUL EMPTY>
|
|
||||||
<!ELEMENT DNEG EMPTY>
|
|
||||||
<!ELEMENT DREM EMPTY>
|
|
||||||
<!ELEMENT DRETURN EMPTY>
|
|
||||||
<!ELEMENT DSTORE EMPTY>
|
|
||||||
<!ATTLIST DSTORE var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT DSUB EMPTY>
|
|
||||||
<!ELEMENT DUP EMPTY>
|
|
||||||
<!ELEMENT DUP2 EMPTY>
|
|
||||||
<!ELEMENT DUP2_X1 EMPTY>
|
|
||||||
<!ELEMENT DUP2_X2 EMPTY>
|
|
||||||
<!ELEMENT DUP_X1 EMPTY>
|
|
||||||
<!ELEMENT DUP_X2 EMPTY>
|
|
||||||
<!ELEMENT SWAP EMPTY>
|
|
||||||
<!ELEMENT F2D EMPTY>
|
|
||||||
<!ELEMENT F2I EMPTY>
|
|
||||||
<!ELEMENT F2L EMPTY>
|
|
||||||
<!ELEMENT FADD EMPTY>
|
|
||||||
<!ELEMENT FALOAD EMPTY>
|
|
||||||
<!ELEMENT FASTORE EMPTY>
|
|
||||||
<!ELEMENT FCMPG EMPTY>
|
|
||||||
<!ELEMENT FCMPL EMPTY>
|
|
||||||
<!ELEMENT FCONST_0 EMPTY>
|
|
||||||
<!ELEMENT FCONST_1 EMPTY>
|
|
||||||
<!ELEMENT FCONST_2 EMPTY>
|
|
||||||
<!ELEMENT FDIV EMPTY>
|
|
||||||
<!ELEMENT FLOAD EMPTY>
|
|
||||||
<!ATTLIST FLOAD var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT FMUL EMPTY>
|
|
||||||
<!ELEMENT FNEG EMPTY>
|
|
||||||
<!ELEMENT FREM EMPTY>
|
|
||||||
<!ELEMENT FRETURN EMPTY>
|
|
||||||
<!ELEMENT FSTORE EMPTY>
|
|
||||||
<!ATTLIST FSTORE var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT FSUB EMPTY>
|
|
||||||
<!ELEMENT GETFIELD EMPTY>
|
|
||||||
<!ATTLIST GETFIELD desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST GETFIELD name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST GETFIELD owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT GETSTATIC EMPTY>
|
|
||||||
<!ATTLIST GETSTATIC desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST GETSTATIC name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST GETSTATIC owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT GOTO EMPTY>
|
|
||||||
<!ATTLIST GOTO label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT I2B EMPTY>
|
|
||||||
<!ELEMENT I2C EMPTY>
|
|
||||||
<!ELEMENT I2D EMPTY>
|
|
||||||
<!ELEMENT I2F EMPTY>
|
|
||||||
<!ELEMENT I2L EMPTY>
|
|
||||||
<!ELEMENT I2S EMPTY>
|
|
||||||
<!ELEMENT IADD EMPTY>
|
|
||||||
<!ELEMENT IALOAD EMPTY>
|
|
||||||
<!ELEMENT IAND EMPTY>
|
|
||||||
<!ELEMENT IASTORE EMPTY>
|
|
||||||
<!ELEMENT ICONST_0 EMPTY>
|
|
||||||
<!ELEMENT ICONST_1 EMPTY>
|
|
||||||
<!ELEMENT ICONST_2 EMPTY>
|
|
||||||
<!ELEMENT ICONST_3 EMPTY>
|
|
||||||
<!ELEMENT ICONST_4 EMPTY>
|
|
||||||
<!ELEMENT ICONST_5 EMPTY>
|
|
||||||
<!ELEMENT ICONST_M1 EMPTY>
|
|
||||||
<!ELEMENT IDIV EMPTY>
|
|
||||||
<!ELEMENT IFEQ EMPTY>
|
|
||||||
<!ATTLIST IFEQ label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFGE EMPTY>
|
|
||||||
<!ATTLIST IFGE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFGT EMPTY>
|
|
||||||
<!ATTLIST IFGT label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFLE EMPTY>
|
|
||||||
<!ATTLIST IFLE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFLT EMPTY>
|
|
||||||
<!ATTLIST IFLT label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFNE EMPTY>
|
|
||||||
<!ATTLIST IFNE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFNONNULL EMPTY>
|
|
||||||
<!ATTLIST IFNONNULL label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IFNULL EMPTY>
|
|
||||||
<!ATTLIST IFNULL label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ACMPEQ EMPTY>
|
|
||||||
<!ATTLIST IF_ACMPEQ label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ACMPNE EMPTY>
|
|
||||||
<!ATTLIST IF_ACMPNE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPEQ EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPEQ label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPGE EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPGE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPGT EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPGT label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPLE EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPLE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPLT EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPLT label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IF_ICMPNE EMPTY>
|
|
||||||
<!ATTLIST IF_ICMPNE label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IINC EMPTY>
|
|
||||||
<!ATTLIST IINC inc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST IINC var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT ILOAD EMPTY>
|
|
||||||
<!ATTLIST ILOAD var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IMUL EMPTY>
|
|
||||||
<!ELEMENT INEG EMPTY>
|
|
||||||
<!ELEMENT INSTANCEOF EMPTY>
|
|
||||||
<!ATTLIST INSTANCEOF desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT INVOKEINTERFACE EMPTY>
|
|
||||||
<!ATTLIST INVOKEINTERFACE desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEINTERFACE name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEINTERFACE owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT INVOKESPECIAL EMPTY>
|
|
||||||
<!ATTLIST INVOKESPECIAL desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKESPECIAL name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKESPECIAL owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT INVOKESTATIC EMPTY>
|
|
||||||
<!ATTLIST INVOKESTATIC desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKESTATIC name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKESTATIC owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT INVOKEVIRTUAL EMPTY>
|
|
||||||
<!ATTLIST INVOKEVIRTUAL desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEVIRTUAL name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEVIRTUAL owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT INVOKEDYNAMIC ( bsmArgs+ )>
|
|
||||||
<!ATTLIST INVOKEDYNAMIC desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEDYNAMIC name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST INVOKEDYNAMIC bsm CDATA #REQUIRED>
|
|
||||||
<!ELEMENT bsmArgs EMPTY>
|
|
||||||
<!ATTLIST bsmArgs cst CDATA #REQUIRED>
|
|
||||||
<!ATTLIST bsmArgs desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT IOR EMPTY>
|
|
||||||
<!ELEMENT IREM EMPTY>
|
|
||||||
<!ELEMENT IRETURN EMPTY>
|
|
||||||
<!ELEMENT ISHL EMPTY>
|
|
||||||
<!ELEMENT ISHR EMPTY>
|
|
||||||
<!ELEMENT ISTORE EMPTY>
|
|
||||||
<!ATTLIST ISTORE var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT ISUB EMPTY>
|
|
||||||
<!ELEMENT IUSHR EMPTY>
|
|
||||||
<!ELEMENT IXOR EMPTY>
|
|
||||||
<!ELEMENT JSR EMPTY>
|
|
||||||
<!ATTLIST JSR label CDATA #REQUIRED>
|
|
||||||
<!ELEMENT L2D EMPTY>
|
|
||||||
<!ELEMENT L2F EMPTY>
|
|
||||||
<!ELEMENT L2I EMPTY>
|
|
||||||
<!ELEMENT LADD EMPTY>
|
|
||||||
<!ELEMENT LALOAD EMPTY>
|
|
||||||
<!ELEMENT LAND EMPTY>
|
|
||||||
<!ELEMENT LASTORE EMPTY>
|
|
||||||
<!ELEMENT LCMP EMPTY>
|
|
||||||
<!ELEMENT LCONST_0 EMPTY>
|
|
||||||
<!ELEMENT LCONST_1 EMPTY>
|
|
||||||
<!ELEMENT LDC EMPTY>
|
|
||||||
<!--
|
|
||||||
All characters out of interval 0x20 to 0x7f (inclusive) must
|
|
||||||
be encoded (\uXXXX) and character '\' must be replaced by "\\"
|
|
||||||
-->
|
|
||||||
<!ATTLIST LDC cst CDATA #REQUIRED>
|
|
||||||
<!ATTLIST LDC desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT LDIV EMPTY>
|
|
||||||
<!ELEMENT LLOAD EMPTY>
|
|
||||||
<!ATTLIST LLOAD var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT LMUL EMPTY>
|
|
||||||
<!ELEMENT LNEG EMPTY>
|
|
||||||
<!ELEMENT LOR EMPTY>
|
|
||||||
<!ELEMENT LREM EMPTY>
|
|
||||||
<!ELEMENT LRETURN EMPTY>
|
|
||||||
<!ELEMENT LSHL EMPTY>
|
|
||||||
<!ELEMENT LSHR EMPTY>
|
|
||||||
<!ELEMENT LSTORE EMPTY>
|
|
||||||
<!ATTLIST LSTORE var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT LSUB EMPTY>
|
|
||||||
<!ELEMENT LUSHR EMPTY>
|
|
||||||
<!ELEMENT LXOR EMPTY>
|
|
||||||
<!ELEMENT MONITORENTER EMPTY>
|
|
||||||
<!ELEMENT MONITOREXIT EMPTY>
|
|
||||||
<!ELEMENT MULTIANEWARRAY EMPTY>
|
|
||||||
<!ATTLIST MULTIANEWARRAY desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST MULTIANEWARRAY dims CDATA #REQUIRED>
|
|
||||||
<!ELEMENT NEW EMPTY>
|
|
||||||
<!ATTLIST NEW desc CDATA #REQUIRED>
|
|
||||||
<!ELEMENT NEWARRAY EMPTY>
|
|
||||||
<!ATTLIST NEWARRAY value CDATA #REQUIRED>
|
|
||||||
<!ELEMENT NOP EMPTY>
|
|
||||||
<!ELEMENT POP EMPTY>
|
|
||||||
<!ELEMENT POP2 EMPTY>
|
|
||||||
<!ELEMENT PUTFIELD EMPTY>
|
|
||||||
<!ATTLIST PUTFIELD desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST PUTFIELD name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST PUTFIELD owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT PUTSTATIC EMPTY>
|
|
||||||
<!ATTLIST PUTSTATIC desc CDATA #REQUIRED>
|
|
||||||
<!ATTLIST PUTSTATIC name CDATA #REQUIRED>
|
|
||||||
<!ATTLIST PUTSTATIC owner CDATA #REQUIRED>
|
|
||||||
<!ELEMENT RET EMPTY>
|
|
||||||
<!ATTLIST RET var CDATA #REQUIRED>
|
|
||||||
<!ELEMENT RETURN EMPTY>
|
|
||||||
<!ELEMENT SALOAD EMPTY>
|
|
||||||
<!ELEMENT SASTORE EMPTY>
|
|
||||||
<!ELEMENT SIPUSH EMPTY>
|
|
||||||
<!ATTLIST SIPUSH value CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT LOOKUPSWITCH ( label+ )>
|
|
||||||
<!ATTLIST LOOKUPSWITCH dflt CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT TABLESWITCH ( label+ )>
|
|
||||||
<!ATTLIST TABLESWITCH dflt CDATA #REQUIRED>
|
|
||||||
<!ATTLIST TABLESWITCH max CDATA #REQUIRED>
|
|
||||||
<!ATTLIST TABLESWITCH min CDATA #REQUIRED>
|
|
||||||
|
|
||||||
<!ELEMENT label EMPTY>
|
|
||||||
<!ATTLIST label key CDATA #IMPLIED>
|
|
||||||
<!ATTLIST label name CDATA #REQUIRED>
|
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
* ASM XML Adapter
|
|
||||||
* Copyright (c) 2004-2011, Eugene Kuleshov
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the copyright holders nor the names of its
|
|
||||||
* contributors may be used to endorse or promote products derived from
|
|
||||||
* this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-->
|
|
||||||
<body>
|
|
||||||
Provides <a href="http://sax.sourceforge.net/">SAX 2.0</a> adapters for ASM
|
|
||||||
visitors to convert classes to and from XML.
|
|
||||||
These adapters can be chained with other SAX compliant content handlers and
|
|
||||||
filters, eg. XSLT or XQuery engines. This package is bundled as
|
|
||||||
a separate <tt>asm-xml.jar</tt> library and requires <tt>asm.jar</tt>.
|
|
||||||
<p>
|
|
||||||
<tt>ASMContentHandler</tt> and <tt>SAXClassAdapter/SAXCodeAdapter</tt>
|
|
||||||
are using <a href="asm-xml.dtd">asm-xml.dtd</a>.
|
|
||||||
Here is the example of bytecode to bytecode XSLT transformation.
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
SAXTransformerFactory saxtf = ( SAXTransformerFactory) TransformerFactory.newInstance();
|
|
||||||
Templates templates = saxtf.newTemplates( xsltSource);
|
|
||||||
|
|
||||||
TransformerHandler handler = saxtf.newTransformerHandler( templates);
|
|
||||||
handler.setResult( new SAXResult( new ASMContentHandler( outputStream, computeMax)));
|
|
||||||
|
|
||||||
ClassReader cr = new ClassReader( bytecode);
|
|
||||||
cr.accept( new SAXClassAdapter( handler, cr.getVersion(), false), false);
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
See JAXP and SAX documentation for more detils.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
There are few illustrations of the bytecode transformation with XSLT in
|
|
||||||
examples directory. The following XSLT procesors has been tested.
|
|
||||||
|
|
||||||
<blockquote>
|
|
||||||
<table border="1" cellspacing="0" cellpadding="3">
|
|
||||||
<tr>
|
|
||||||
<th>Engine</td>
|
|
||||||
<th>javax.xml.transform.TransformerFactory property</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>jd.xslt</td>
|
|
||||||
<td>jd.xml.xslt.trax.TransformerFactoryImpl</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Saxon</td>
|
|
||||||
<td>net.sf.saxon.TransformerFactoryImpl</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Caucho</td>
|
|
||||||
<td>com.caucho.xsl.Xsl</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Xalan interpeter</td>
|
|
||||||
<td>org.apache.xalan.processor.TransformerFactory</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Xalan xsltc</td>
|
|
||||||
<td>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</blockquote>
|
|
||||||
|
|
||||||
@since ASM 1.4.3
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -83,6 +83,7 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
|
||||||
* Make the tabs menu and middle mouse button click work on the tab itself not just the close button.
|
* Make the tabs menu and middle mouse button click work on the tab itself not just the close button.
|
||||||
*
|
*
|
||||||
* before 3.0.0:
|
* before 3.0.0:
|
||||||
|
* EVERYTHING ON THE FUCKING GITHUB ISSUES LOL
|
||||||
* make it use that global last used inside of export as jar
|
* make it use that global last used inside of export as jar
|
||||||
* Spiffy up the plugin console with hilighted lines
|
* Spiffy up the plugin console with hilighted lines
|
||||||
* Take https://github.com/ptnkjke/Java-Bytecode-Editor visualize
|
* Take https://github.com/ptnkjke/Java-Bytecode-Editor visualize
|
||||||
|
@ -98,7 +99,7 @@ import the.bytecode.club.bytecodeviewer.plugin.PluginManager;
|
||||||
*
|
*
|
||||||
* -----2.9.9-----:
|
* -----2.9.9-----:
|
||||||
* 08/01/2015 - Fixed a pingback concurrency exception issue.
|
* 08/01/2015 - Fixed a pingback concurrency exception issue.
|
||||||
* 08/01/2015 - Fixed a typo for FernFlower decompiler.
|
* 08/03/2015 - Fixed a typo for FernFlower decompiler.
|
||||||
*
|
*
|
||||||
* @author Konloch
|
* @author Konloch
|
||||||
*
|
*
|
||||||
|
|
|
@ -140,6 +140,7 @@ public class KrakatauDecompiler extends Decompiler {
|
||||||
BytecodeViewer.python,
|
BytecodeViewer.python,
|
||||||
"-O", //love you storyyeller <3
|
"-O", //love you storyyeller <3
|
||||||
BytecodeViewer.krakatauWorkingDirectory + BytecodeViewer.fs + "decompile.py",
|
BytecodeViewer.krakatauWorkingDirectory + BytecodeViewer.fs + "decompile.py",
|
||||||
|
"-skip", //love you storyyeller <3
|
||||||
"-nauto",
|
"-nauto",
|
||||||
"-path",
|
"-path",
|
||||||
BytecodeViewer.rt+";"+tempJar.getAbsolutePath(),
|
BytecodeViewer.rt+";"+tempJar.getAbsolutePath(),
|
||||||
|
|
Loading…
Reference in a new issue