package net.contra.obfuscator.util.bcel; import com.sun.org.apache.bcel.internal.generic.*; public class BCELMethods { public static boolean isFieldInvoke(Instruction ins) { return ins instanceof GETSTATIC || ins instanceof PUTSTATIC || ins instanceof GETFIELD || ins instanceof PUTFIELD; } public static String getFieldInvokeName(Instruction ins, ConstantPoolGen cp) { if (ins instanceof GETSTATIC) { return (((GETSTATIC) ins).getFieldName(cp)); } else if (ins instanceof PUTSTATIC) { return (((PUTSTATIC) ins).getFieldName(cp)); } else if (ins instanceof GETFIELD) { return (((GETFIELD) ins).getFieldName(cp)); } else if (ins instanceof PUTFIELD) { return (((PUTFIELD) ins).getFieldName(cp)); } else { return null; } } public static String getFieldInvokeClassName(Instruction ins, ConstantPoolGen cp) { if (ins instanceof GETSTATIC) { return (((GETSTATIC) ins).getClassName(cp)); } else if (ins instanceof PUTSTATIC) { return (((PUTSTATIC) ins).getClassName(cp)); } else if (ins instanceof GETFIELD) { return (((GETFIELD) ins).getClassName(cp)); } else if (ins instanceof PUTFIELD) { return (((PUTFIELD) ins).getClassName(cp)); } else { return null; } } public static String getFieldInvokeSignature(Instruction ins, ConstantPoolGen cp) { if (ins instanceof GETSTATIC) { return (((GETSTATIC) ins).getSignature(cp)); } else if (ins instanceof PUTSTATIC) { return (((PUTSTATIC) ins).getSignature(cp)); } else if (ins instanceof GETFIELD) { return (((GETFIELD) ins).getSignature(cp)); } else if (ins instanceof PUTFIELD) { return (((PUTFIELD) ins).getSignature(cp)); } else { return null; } } public static Instruction getNewFieldInvoke(Instruction ins, int index) { if (ins instanceof GETSTATIC) { return new GETSTATIC(index); } else if (ins instanceof PUTSTATIC) { return new PUTSTATIC(index); } else if (ins instanceof GETFIELD) { return new GETFIELD(index); } else if (ins instanceof PUTFIELD) { return new PUTFIELD(index); } else { return null; } } public static boolean isInteger(Instruction ins) { return ins instanceof ICONST || ins instanceof BIPUSH || ins instanceof SIPUSH; } public static int getIntegerValue(Instruction ins) { if (ins instanceof ICONST) { return ((ICONST) ins).getValue().intValue(); } else if (ins instanceof BIPUSH) { return ((BIPUSH) ins).getValue().intValue(); } else if (ins instanceof SIPUSH) { return ((SIPUSH) ins).getValue().intValue(); } return -9001; } public static Instruction getIntegerLoad(Instruction ins, int i) { if (ins instanceof ICONST) { return new ICONST(i); } else if (ins instanceof BIPUSH) { return new BIPUSH((byte) i); } else if (ins instanceof SIPUSH) { return new SIPUSH((short) i); } return null; } public static boolean isInvoke(Instruction ins) { return ins instanceof INVOKEVIRTUAL || ins instanceof INVOKEINTERFACE || ins instanceof INVOKESPECIAL || ins instanceof INVOKESTATIC; } public static String getInvokeMethodName(Instruction ins, ConstantPoolGen cp) { if (ins instanceof INVOKESTATIC) { INVOKESTATIC invst = (INVOKESTATIC) ins; return invst.getMethodName(cp); } else if (ins instanceof INVOKEVIRTUAL) { INVOKEVIRTUAL invst = (INVOKEVIRTUAL) ins; return invst.getMethodName(cp); } else if (ins instanceof INVOKEINTERFACE) { INVOKEINTERFACE invst = (INVOKEINTERFACE) ins; return invst.getMethodName(cp); } else if (ins instanceof INVOKESPECIAL) { INVOKESPECIAL invst = (INVOKESPECIAL) ins; return invst.getMethodName(cp); } else { return null; } } public static Instruction getNewInvoke(Instruction ins, int index) { if (ins instanceof INVOKESTATIC) { return new INVOKESTATIC(index); } else if (ins instanceof INVOKEVIRTUAL) { return new INVOKEVIRTUAL(index); } else if (ins instanceof INVOKEINTERFACE) { INVOKEINTERFACE newInv = ((INVOKEINTERFACE) ins); newInv.setIndex(index); return newInv; } else if (ins instanceof INVOKESPECIAL) { return new INVOKESPECIAL(index); } else { return null; } } public static String getInvokeSignature(Instruction ins, ConstantPoolGen cp) { if (ins instanceof INVOKESTATIC) { INVOKESTATIC invst = (INVOKESTATIC) ins; return invst.getSignature(cp); } else if (ins instanceof INVOKEVIRTUAL) { INVOKEVIRTUAL invst = (INVOKEVIRTUAL) ins; return invst.getSignature(cp); } else if (ins instanceof INVOKEINTERFACE) { INVOKEINTERFACE invst = (INVOKEINTERFACE) ins; return invst.getSignature(cp); } else if (ins instanceof INVOKESPECIAL) { INVOKESPECIAL invst = (INVOKESPECIAL) ins; return invst.getSignature(cp); } else { return null; } } public static String getInvokeClassName(Instruction ins, ConstantPoolGen cp) { if (ins instanceof INVOKESTATIC) { INVOKESTATIC invst = (INVOKESTATIC) ins; return invst.getClassName(cp); } else if (ins instanceof INVOKEVIRTUAL) { INVOKEVIRTUAL invst = (INVOKEVIRTUAL) ins; return invst.getClassName(cp); } else if (ins instanceof INVOKEINTERFACE) { INVOKEINTERFACE invst = (INVOKEINTERFACE) ins; return invst.getClassName(cp); } else if (ins instanceof INVOKESPECIAL) { INVOKESPECIAL invst = (INVOKESPECIAL) ins; return invst.getClassName(cp); } else { return null; } } }