11/7/2014 - Fixed the search function.
11/7/2014 - Removed an unused package containing some unused classes.
This commit is contained in:
Kalen Kinloch 2014-11-07 19:00:16 -08:00
parent 132d8e678f
commit 28a187a7cd
9 changed files with 16 additions and 677 deletions

BIN
BytecodeViewer 2.0.1.jar Normal file

Binary file not shown.

View file

@ -147,4 +147,7 @@ Changelog:
11/5/2014 - Made the Show All Strings plugin instant. 11/5/2014 - Made the Show All Strings plugin instant.
11/5/2014 - Kinda added middle mouse button closes tab (only if you click the exit button). 11/5/2014 - Kinda added middle mouse button closes tab (only if you click the exit button).
11/5/2014 - Improved the Malicious Code Scanner, also made it instant. 11/5/2014 - Improved the Malicious Code Scanner, also made it instant.
11/5/2014 - Added icons to the program (cheers Fluke). 11/5/2014 - Added icons to the program (cheers Fluke).
--- 2.0.1 ---:
11/7/2014 - Fixed the search function.
11/7/2014 - Removed an unused package containing some unused classes.

View file

@ -1 +1 @@
2.0 2.0.1

View file

@ -176,6 +176,9 @@ import the.bytecode.club.bytecodeviewer.plugins.PluginManager;
* 11/5/2014 - Kinda added middle mouse button closes tab (only if you click the exit button). * 11/5/2014 - Kinda added middle mouse button closes tab (only if you click the exit button).
* 11/5/2014 - Improved the Malicious Code Scanner, also made it instant. * 11/5/2014 - Improved the Malicious Code Scanner, also made it instant.
* 11/5/2014 - Added icons to the program (cheers Fluke). * 11/5/2014 - Added icons to the program (cheers Fluke).
* ----2.0.1-----:
* 11/7/2014 - Fixed the search function.
* 11/7/2014 - Removed an unused package containing some unused classes.
* *
* @author Konloch * @author Konloch
* *
@ -196,7 +199,7 @@ public class BytecodeViewer {
private static ArrayList<String> recentFiles = DiskReader.loadArrayList(filesName, false); private static ArrayList<String> recentFiles = DiskReader.loadArrayList(filesName, false);
private static ArrayList<String> recentPlugins = DiskReader.loadArrayList(pluginsName, false); private static ArrayList<String> recentPlugins = DiskReader.loadArrayList(pluginsName, false);
public static String version = "2.0"; public static String version = "2.0.1";
public static void main(String[] args) { public static void main(String[] args) {
iconList = new ArrayList<BufferedImage>(); iconList = new ArrayList<BufferedImage>();

View file

@ -154,6 +154,13 @@ public class ClassViewer extends JPanel {
if(next) { if(next) {
for(String s : test) { for(String s : test) {
if(pane == 0 && !byteCheck.isSelected() ||
pane == 1 && !decompCheck.isSelected())
{
s = s.toLowerCase();
search = search.toLowerCase();
}
if(currentLine == startLine) { if(currentLine == startLine) {
canSearch = true; canSearch = true;
} else if(s.contains(search)) { } else if(s.contains(search)) {

View file

@ -1,489 +0,0 @@
package the.bytecode.club.bytecodeviewer.searching.commons;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.FieldInsnNode;
import org.objectweb.asm.tree.IntInsnNode;
/**
*
* Class containing bytecode search conditions and couple of helper methods to make them
*
* @author Waterwolf
*
**/
public class AnalyzerFactory implements Opcodes {
public static InsnAnalyzer makeOpcodeCond(final int opcode) {
return new InsnAnalyzer() {
@Override
public boolean accept(final AbstractInsnNode node) {
return node.getOpcode() == opcode;
}
};
}
public static InsnAnalyzer makeFieldCond(final int opcode,
final String type) {
return new InsnAnalyzer() {
@Override
public boolean accept(final AbstractInsnNode node) {
if (node instanceof FieldInsnNode)
return node.getOpcode() == opcode && ((FieldInsnNode) node).desc.equals(type);
else
return false;
}
};
}
public static InsnAnalyzer makeFieldOwnerCond(final int opcode,
final String owner) {
return new InsnAnalyzer() {
@Override
public boolean accept(final AbstractInsnNode node) {
if (node instanceof FieldInsnNode)
return node.getOpcode() == opcode && ((FieldInsnNode) node).owner.equals(owner);
else
return false;
}
};
}
public static InsnAnalyzer makeFieldRegexCond(final int opcode,
final String regex) {
return new InsnAnalyzer() {
@Override
public boolean accept(final AbstractInsnNode node) {
if (node instanceof FieldInsnNode)
return node.getOpcode() == opcode && ((FieldInsnNode) node).desc.matches(regex);
else
return false;
}
};
}
public static InsnAnalyzer makeIntCond(final int opcode,
final int value) {
return new InsnAnalyzer() {
@Override
public boolean accept(final AbstractInsnNode node) {
if (node instanceof IntInsnNode)
return node.getOpcode() == opcode && ((IntInsnNode) node).operand == value;
else
return false;
}
};
}
/**
* An instruction condition for a GETFIELD instruction with signature Z.
*/
public final static InsnAnalyzer GETFIELD_Z =
makeFieldCond(GETFIELD, "Z");
/**
* An instruction condition for a PUTFIELD instruction with signature Z.
*/
public final static InsnAnalyzer PUTFIELD_Z =
makeFieldCond(PUTFIELD, "Z");
/**
* An instruction condition for a GETSTATIC instruction with signature Z.
*/
public final static InsnAnalyzer GETSTATIC_Z =
makeFieldCond(GETSTATIC, "Z");
/**
* An instruction condition for a PUTSTATIC instruction with signature Z.
*/
public final static InsnAnalyzer PUTSTATIC_Z =
makeFieldCond(PUTSTATIC, "Z");
/**
* An instruction condition for a GETFIELD instruction with signature [Z.
*/
public final static InsnAnalyzer GETFIELD_ZA =
makeFieldCond(GETFIELD, "[Z");
/**
* An instruction condition for a PUTFIELD instruction with signature [Z.
*/
public final static InsnAnalyzer PUTFIELD_ZA =
makeFieldCond(PUTFIELD, "[Z");
/**
* An instruction condition for a GETSTATIC instruction with signature [Z.
*/
public final static InsnAnalyzer GETSTATIC_ZA =
makeFieldCond(GETSTATIC, "[Z");
/**
* An instruction condition for a PUTSTATIC instruction with signature [Z.
*/
public final static InsnAnalyzer PUTSTATIC_ZA =
makeFieldCond(PUTSTATIC, "[Z");
/**
* An instruction condition for a GETFIELD instruction with signature [[Z.
*/
public final static InsnAnalyzer GETFIELD_ZAA =
makeFieldCond(GETFIELD, "[[Z");
/**
* An instruction condition for a PUTFIELD instruction with signature [[Z.
*/
public final static InsnAnalyzer PUTFIELD_ZAA =
makeFieldCond(PUTFIELD, "[[Z");
/**
* An instruction condition for a GETSTATIC instruction with signature [[Z.
*/
public final static InsnAnalyzer GETSTATIC_ZAA =
makeFieldCond(GETSTATIC, "[[Z");
/**
* An instruction condition for a PUTSTATIC instruction with signature [[Z.
*/
public final static InsnAnalyzer PUTSTATIC_ZAA =
makeFieldCond(PUTSTATIC, "[[Z");
/**
* An instruction condition for a GETFIELD instruction with signature B.
*/
public final static InsnAnalyzer GETFIELD_B =
makeFieldCond(GETFIELD, "B");
/**
* An instruction condition for a PUTFIELD instruction with signature B.
*/
public final static InsnAnalyzer PUTFIELD_B =
makeFieldCond(PUTFIELD, "B");
/**
* An instruction condition for a GETSTATIC instruction with signature B.
*/
public final static InsnAnalyzer GETSTATIC_B =
makeFieldCond(GETSTATIC, "B");
/**
* An instruction condition for a PUTSTATIC instruction with signature B.
*/
public final static InsnAnalyzer PUTSTATIC_B =
makeFieldCond(PUTSTATIC, "B");
/**
* An instruction condition for a GETFIELD instruction with signature [B.
*/
public final static InsnAnalyzer GETFIELD_BA =
makeFieldCond(GETFIELD, "[B");
/**
* An instruction condition for a PUTFIELD instruction with signature [B.
*/
public final static InsnAnalyzer PUTFIELD_BA =
makeFieldCond(PUTFIELD, "[B");
/**
* An instruction condition for a GETSTATIC instruction with signature [B.
*/
public final static InsnAnalyzer GETSTATIC_BA =
makeFieldCond(GETSTATIC, "[B");
/**
* An instruction condition for a PUTSTATIC instruction with signature [B.
*/
public final static InsnAnalyzer PUTSTATIC_BA =
makeFieldCond(PUTSTATIC, "[B");
/**
* An instruction condition for a GETFIELD instruction with signature [[B.
*/
public final static InsnAnalyzer GETFIELD_BAA =
makeFieldCond(GETFIELD, "[[B");
/**
* An instruction condition for a PUTFIELD instruction with signature [[B.
*/
public final static InsnAnalyzer PUTFIELD_BAA =
makeFieldCond(PUTFIELD, "[[B");
/**
* An instruction condition for a GETSTATIC instruction with signature [[B.
*/
public final static InsnAnalyzer GETSTATIC_BAA =
makeFieldCond(GETSTATIC, "[[B");
/**
* An instruction condition for a PUTSTATIC instruction with signature [[B.
*/
public final static InsnAnalyzer PUTSTATIC_BAA =
makeFieldCond(PUTSTATIC, "[[B");
/**
* An instruction condition for a GETFIELD instruction with signature C.
*/
public final static InsnAnalyzer GETFIELD_C =
makeFieldCond(GETFIELD, "C");
/**
* An instruction condition for a PUTFIELD instruction with signature C.
*/
public final static InsnAnalyzer PUTFIELD_C =
makeFieldCond(PUTFIELD, "C");
/**
* An instruction condition for a GETSTATIC instruction with signature C.
*/
public final static InsnAnalyzer GETSTATIC_C =
makeFieldCond(GETSTATIC, "C");
/**
* An instruction condition for a PUTSTATIC instruction with signature C.
*/
public final static InsnAnalyzer PUTSTATIC_C =
makeFieldCond(PUTSTATIC, "C");
/**
* An instruction condition for a GETFIELD instruction with signature [C.
*/
public final static InsnAnalyzer GETFIELD_CA =
makeFieldCond(GETFIELD, "[C");
/**
* An instruction condition for a PUTFIELD instruction with signature [C.
*/
public final static InsnAnalyzer PUTFIELD_CA =
makeFieldCond(PUTFIELD, "[C");
/**
* An instruction condition for a GETSTATIC instruction with signature [C.
*/
public final static InsnAnalyzer GETSTATIC_CA =
makeFieldCond(GETSTATIC, "[C");
/**
* An instruction condition for a PUTSTATIC instruction with signature [C.
*/
public final static InsnAnalyzer PUTSTATIC_CA =
makeFieldCond(PUTSTATIC, "[C");
/**
* An instruction condition for a GETFIELD instruction with signature [[C.
*/
public final static InsnAnalyzer GETFIELD_CAA =
makeFieldCond(GETFIELD, "[[C");
/**
* An instruction condition for a PUTFIELD instruction with signature [[C.
*/
public final static InsnAnalyzer PUTFIELD_CAA =
makeFieldCond(PUTFIELD, "[[C");
/**
* An instruction condition for a GETSTATIC instruction with signature [[C.
*/
public final static InsnAnalyzer GETSTATIC_CAA =
makeFieldCond(GETSTATIC, "[[C");
/**
* An instruction condition for a PUTSTATIC instruction with signature [[C.
*/
public final static InsnAnalyzer PUTSTATIC_CAA =
makeFieldCond(PUTSTATIC, "[[C");
/**
* An instruction condition for a GETFIELD instruction with signature S.
*/
public final static InsnAnalyzer GETFIELD_S =
makeFieldCond(GETFIELD, "S");
/**
* An instruction condition for a PUTFIELD instruction with signature S.
*/
public final static InsnAnalyzer PUTFIELD_S =
makeFieldCond(PUTFIELD, "S");
/**
* An instruction condition for a GETSTATIC instruction with signature S.
*/
public final static InsnAnalyzer GETSTATIC_S =
makeFieldCond(GETSTATIC, "S");
/**
* An instruction condition for a PUTSTATIC instruction with signature S.
*/
public final static InsnAnalyzer PUTSTATIC_S =
makeFieldCond(PUTSTATIC, "S");
/**
* An instruction condition for a GETFIELD instruction with signature [S.
*/
public final static InsnAnalyzer GETFIELD_SA =
makeFieldCond(GETFIELD, "[S");
/**
* An instruction condition for a PUTFIELD instruction with signature [S.
*/
public final static InsnAnalyzer PUTFIELD_SA =
makeFieldCond(PUTFIELD, "[S");
/**
* An instruction condition for a GETSTATIC instruction with signature [S.
*/
public final static InsnAnalyzer GETSTATIC_SA =
makeFieldCond(GETSTATIC, "[S");
/**
* An instruction condition for a PUTSTATIC instruction with signature [S.
*/
public final static InsnAnalyzer PUTSTATIC_SA =
makeFieldCond(PUTSTATIC, "[S");
/**
* An instruction condition for a GETFIELD instruction with signature [[S.
*/
public final static InsnAnalyzer GETFIELD_SAA =
makeFieldCond(GETFIELD, "[[S");
/**
* An instruction condition for a PUTFIELD instruction with signature [[S.
*/
public final static InsnAnalyzer PUTFIELD_SAA =
makeFieldCond(PUTFIELD, "[[S");
/**
* An instruction condition for a GETSTATIC instruction with signature [[S.
*/
public final static InsnAnalyzer GETSTATIC_SAA =
makeFieldCond(GETSTATIC, "[[S");
/**
* An instruction condition for a PUTSTATIC instruction with signature [[S.
*/
public final static InsnAnalyzer PUTSTATIC_SAA =
makeFieldCond(PUTSTATIC, "[[S");
public final static InsnAnalyzer GETFIELD_I =
makeFieldCond(GETFIELD, "I");
public final static InsnAnalyzer PUTFIELD_I =
makeFieldCond(PUTFIELD, "I");
public final static InsnAnalyzer GETSTATIC_I =
makeFieldCond(GETSTATIC, "I");
public final static InsnAnalyzer PUTSTATIC_I =
makeFieldCond(PUTSTATIC, "I");
public final static InsnAnalyzer GETFIELD_IA =
makeFieldCond(GETFIELD, "[I");
public final static InsnAnalyzer PUTFIELD_IA =
makeFieldCond(PUTFIELD, "[I");
public final static InsnAnalyzer GETSTATIC_IA =
makeFieldCond(GETSTATIC, "[I");
public final static InsnAnalyzer PUTSTATIC_IA =
makeFieldCond(PUTSTATIC, "[I");
public final static InsnAnalyzer GETFIELD_IAA =
makeFieldCond(GETFIELD, "[[I");
public final static InsnAnalyzer PUTFIELD_IAA =
makeFieldCond(PUTFIELD, "[[I");
public final static InsnAnalyzer GETSTATIC_IAA =
makeFieldCond(GETSTATIC, "[[I");
public final static InsnAnalyzer PUTSTATIC_IAA =
makeFieldCond(PUTSTATIC, "[[I");
public final static InsnAnalyzer GETFIELD_J =
makeFieldCond(GETFIELD, "J");
public final static InsnAnalyzer PUTFIELD_J =
makeFieldCond(PUTFIELD, "J");
public final static InsnAnalyzer GETSTATIC_J =
makeFieldCond(GETSTATIC, "J");
public final static InsnAnalyzer PUTSTATIC_J =
makeFieldCond(PUTSTATIC, "J");
public final static InsnAnalyzer GETFIELD_JA =
makeFieldCond(GETFIELD, "[J");
public final static InsnAnalyzer PUTFIELD_JA =
makeFieldCond(PUTFIELD, "[J");
public final static InsnAnalyzer GETSTATIC_JA =
makeFieldCond(GETSTATIC, "[J");
public final static InsnAnalyzer PUTSTATIC_JA =
makeFieldCond(PUTSTATIC, "[J");
public final static InsnAnalyzer GETFIELD_JAA =
makeFieldCond(GETFIELD, "[[J");
public final static InsnAnalyzer PUTFIELD_JAA =
makeFieldCond(PUTFIELD, "[[J");
public final static InsnAnalyzer GETSTATIC_JAA =
makeFieldCond(GETSTATIC, "[[J");
public final static InsnAnalyzer PUTSTATIC_JAA =
makeFieldCond(PUTSTATIC, "[[J");
public final static InsnAnalyzer GETFIELD_F =
makeFieldCond(GETFIELD, "F");
public final static InsnAnalyzer PUTFIELD_F =
makeFieldCond(PUTFIELD, "F");
public final static InsnAnalyzer GETSTATIC_F =
makeFieldCond(GETSTATIC, "F");
public final static InsnAnalyzer PUTSTATIC_F =
makeFieldCond(PUTSTATIC, "F");
public final static InsnAnalyzer GETFIELD_FA =
makeFieldCond(GETFIELD, "[F");
public final static InsnAnalyzer PUTFIELD_FA =
makeFieldCond(PUTFIELD, "[F");
public final static InsnAnalyzer GETSTATIC_FA =
makeFieldCond(GETSTATIC, "[F");
public final static InsnAnalyzer PUTSTATIC_FA =
makeFieldCond(PUTSTATIC, "[F");
public final static InsnAnalyzer GETFIELD_FAA =
makeFieldCond(GETFIELD, "[[F");
public final static InsnAnalyzer PUTFIELD_FAA =
makeFieldCond(PUTFIELD, "[[F");
public final static InsnAnalyzer GETSTATIC_FAA =
makeFieldCond(GETSTATIC, "[[F");
public final static InsnAnalyzer PUTSTATIC_FAA =
makeFieldCond(PUTSTATIC, "[[F");
public final static InsnAnalyzer GETFIELD_D =
makeFieldCond(GETFIELD, "D");
public final static InsnAnalyzer PUTFIELD_D =
makeFieldCond(PUTFIELD, "D");
public final static InsnAnalyzer GETSTATIC_D =
makeFieldCond(GETSTATIC, "D");
public final static InsnAnalyzer PUTSTATIC_D =
makeFieldCond(PUTSTATIC, "D");
public final static InsnAnalyzer GETFIELD_DA =
makeFieldCond(GETFIELD, "[D");
public final static InsnAnalyzer PUTFIELD_DA =
makeFieldCond(PUTFIELD, "[D");
public final static InsnAnalyzer GETSTATIC_DA =
makeFieldCond(GETSTATIC, "[D");
public final static InsnAnalyzer PUTSTATIC_DA =
makeFieldCond(PUTSTATIC, "[D");
public final static InsnAnalyzer GETFIELD_DAA =
makeFieldCond(GETFIELD, "[[D");
public final static InsnAnalyzer PUTFIELD_DAA =
makeFieldCond(PUTFIELD, "[[D");
public final static InsnAnalyzer GETSTATIC_DAA =
makeFieldCond(GETSTATIC, "[[D");
public final static InsnAnalyzer PUTSTATIC_DAA =
makeFieldCond(PUTSTATIC, "[[D");
public final static InsnAnalyzer GETFIELD_L =
makeFieldRegexCond(GETFIELD, "L.*;");
public final static InsnAnalyzer PUTFIELD_L =
makeFieldRegexCond(PUTFIELD, "L.*;");
public final static InsnAnalyzer GETSTATIC_L =
makeFieldRegexCond(GETSTATIC, "L.*;");
public final static InsnAnalyzer PUTSTATIC_L =
makeFieldRegexCond(PUTSTATIC, "L.*;");
public final static InsnAnalyzer GETFIELD_LA =
makeFieldRegexCond(GETFIELD, "\\[L.*;");
public final static InsnAnalyzer PUTFIELD_LA =
makeFieldRegexCond(PUTFIELD, "\\[L.*;");
public final static InsnAnalyzer GETSTATIC_LA =
makeFieldRegexCond(GETSTATIC, "\\[L.*;");
public final static InsnAnalyzer PUTSTATIC_LA =
makeFieldRegexCond(PUTSTATIC, "\\[L.*;");
public final static InsnAnalyzer GETFIELD_LAA =
makeFieldRegexCond(GETFIELD, "\\[\\[L.*;");
public final static InsnAnalyzer PUTFIELD_LAA =
makeFieldRegexCond(PUTFIELD, "\\[\\[L.*;");
public final static InsnAnalyzer GETSTATIC_LAA =
makeFieldRegexCond(GETSTATIC, "\\[\\[L.*;");
public final static InsnAnalyzer PUTSTATIC_LAA =
makeFieldRegexCond(PUTSTATIC, "\\[\\[L.*;");
public final static InsnAnalyzer GETFIELD_String =
makeFieldCond(GETFIELD, "Ljava/lang/String;");
public final static InsnAnalyzer PUTFIELD_String =
makeFieldCond(PUTFIELD, "Ljava/lang/String;");
public final static InsnAnalyzer GETSTATIC_String =
makeFieldCond(GETSTATIC, "Ljava/lang/String;");
public final static InsnAnalyzer PUTSTATIC_String =
makeFieldCond(PUTSTATIC, "Ljava/lang/String;");
public final static InsnAnalyzer GETFIELD_StringA =
makeFieldCond(GETFIELD, "[Ljava/lang/String;");
public final static InsnAnalyzer PUTFIELD_StringA =
makeFieldCond(PUTFIELD, "[Ljava/lang/String;");
public final static InsnAnalyzer GETSTATIC_StringA =
makeFieldCond(GETSTATIC, "[Ljava/lang/String;");
public final static InsnAnalyzer PUTSTATIC_StringA =
makeFieldCond(PUTSTATIC, "[Ljava/lang/String;");
public final static InsnAnalyzer GETFIELD_StringAA =
makeFieldCond(GETFIELD, "[[Ljava/lang/String;");
public final static InsnAnalyzer PUTFIELD_StringAA =
makeFieldCond(PUTFIELD, "[[Ljava/lang/String;");
public final static InsnAnalyzer GETSTATIC_StringAA =
makeFieldCond(GETSTATIC, "[[Ljava/lang/String;");
public final static InsnAnalyzer PUTSTATIC_StringAA =
makeFieldCond(PUTSTATIC, "[[Ljava/lang/String;");
}

View file

@ -1,14 +0,0 @@
package the.bytecode.club.bytecodeviewer.searching.commons;
import org.objectweb.asm.tree.AbstractInsnNode;
/**
*
* Bytecode instruction search baseclass
*
* @author Waterwolf
*
*/
public interface InsnAnalyzer {
public boolean accept(AbstractInsnNode node);
}

View file

@ -1,171 +0,0 @@
package the.bytecode.club.bytecodeviewer.searching.commons;
import java.util.ArrayList;
import java.util.List;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.InsnList;
import org.objectweb.asm.tree.IntInsnNode;
import org.objectweb.asm.tree.LdcInsnNode;
import org.objectweb.asm.tree.MethodNode;
/**
* Class that searches bytecode instructions using given search conditions.
*
* @author WaterWolf
* @author Matthew Bovard
*
*/
public class InstructionSearcher {
private final InsnList list;
private AbstractInsnNode current;
public InstructionSearcher(final MethodNode m) {
this.list = m.instructions;
this.current = list.getFirst();
}
public AbstractInsnNode getCurrent() {
return current;
}
public void setCurrent(final AbstractInsnNode in) {
current = in;
}
public AbstractInsnNode getNext(final int opcode) {
return getNext(AnalyzerFactory.makeOpcodeCond(opcode));
}
public AbstractInsnNode getNext(final InsnAnalyzer analyzer) {
while (current != null) {
if (analyzer.accept(current)) {
final AbstractInsnNode old = current;
current = current.getNext();
return old;
}
current = current.getNext();
}
return null;
}
public AbstractInsnNode getNext() {
if (current == null)
return null;
current = current.getNext();
while (current != null && current.getOpcode() == -1) {
current = current.getNext();
}
return current;
}
public AbstractInsnNode getPrevious(final InsnAnalyzer analyzer) {
while (current != null) {
if (analyzer.accept(current)) {
final AbstractInsnNode old = current;
current = current.getPrevious();
return old;
}
current = current.getPrevious();
}
return null;
}
public AbstractInsnNode getPrevious(final int opcode) {
return getPrevious(AnalyzerFactory.makeOpcodeCond(opcode));
}
public AbstractInsnNode getPrevious() {
current = current.getPrevious();
while (current.getOpcode() == -1) {
current = current.getPrevious();
}
return current;
}
public LdcInsnNode getNextLDC(final Object cst) {
AbstractInsnNode in;
while ((in = getNext(Opcodes.LDC)) != null) {
final LdcInsnNode ln = (LdcInsnNode) in;
if (ln.cst.equals(cst)) return ln;
}
return null;
}
public LdcInsnNode getPreviousLDC(final Object cst) {
AbstractInsnNode in;
while ((in = getPrevious(Opcodes.LDC)) != null) {
final LdcInsnNode ln = (LdcInsnNode) in;
if (ln.cst.equals(cst))
return ln;
}
return null;
}
public IntInsnNode getNextInt(final int opcode, final int i) {
return (IntInsnNode) this.getNext(AnalyzerFactory.makeIntCond(opcode, i));
}
public IntInsnNode getPreviousInt(final int opcode, final int i) {
return (IntInsnNode) this.getPrevious(AnalyzerFactory.makeIntCond(opcode, i));
}
/**
* @param opcode One of Opcodes.BIPUSH/Opcodes.SIPUSH
* @param value Value to look for
* @return
*/
public IntInsnNode getNextPush(final int opcode, final int value) {
AbstractInsnNode in;
while ((in = getNext(opcode)) != null) {
final IntInsnNode iin = (IntInsnNode) in;
if (iin.operand == value) return iin;
}
return null;
}
public List<AbstractInsnNode> analyze(final int opcode) {
reset();
final List<AbstractInsnNode> list = new ArrayList<AbstractInsnNode>();
AbstractInsnNode in;
while ((in = getNext(opcode)) != null) {
list.add(in);
}
return list;
}
public int getIndex() {
return list.indexOf(current);
}
public void setIndex(final int index) {
current = list.get(index);
}
/**
* Resets us back to the first instruction
*/
public void reset() {
current = list.getFirst();
}
public void resetToEnd() {
current = list.getLast();
}
public void insert(final AbstractInsnNode location, final AbstractInsnNode insn) {
this.list.insert(location, insn);
}
public int computePosition(final AbstractInsnNode node) {
AbstractInsnNode poller = list.getFirst();
int index = 0;
while ((poller = poller.getNext()) != null) {
if (poller.equals(node))
return index;
index++;
}
return -1;
}
}