/* * Copyright (c) 2009-2012 Panxiaobo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.googlecode.d2j.visitors; import com.googlecode.d2j.DexLabel; import com.googlecode.d2j.Field; import com.googlecode.d2j.Method; import com.googlecode.d2j.reader.Op; /** * @author <a href="mailto:pxb1988@gmail.com">Panxiaobo</a> * @version $Rev$ */ public class DexCodeVisitor { protected DexCodeVisitor visitor; public DexCodeVisitor() { super(); } public DexCodeVisitor(DexCodeVisitor visitor) { super(); this.visitor = visitor; } public void visitRegister(int total) { if (visitor != null) { visitor.visitRegister(total); } } /** * <pre> * OP_X_INT_LIT8 * </pre> * * @param op * @param distReg * @param srcReg * @param content */ public void visitStmt2R1N(Op op, int distReg, int srcReg, int content) { if (visitor != null) { visitor.visitStmt2R1N(op, distReg, srcReg, content); } } /** * <pre> * * OP_ADD * OP_SUB * OP_MUL * OP_DIV * OP_REM * OP_AND * OP_OR * OP_XOR * OP_SHL * OP_SHR * OP_USHR * OP_CMPL * OP_CMPG * OP_CMP * OP_AGETX * OP_APUTX * </pre> * */ public void visitStmt3R(Op op, int a, int b, int c) { if (visitor != null) { visitor.visitStmt3R(op, a, b, c); } } /** * <pre> * OP_INSTANCE_OF * OP_NEW_ARRAY * OP_CHECK_CAST * OP_NEW_INSTANCE * </pre> * * @param op * @param a * @param b * @param type */ public void visitTypeStmt(Op op, int a, int b, String type) { if (visitor != null) { visitor.visitTypeStmt(op, a, b, type); } } /** * <pre> * CONST * CONST_WIDE * CONST_STRING * CONST_CLASS * * </pre> * * @param op * @param ra * @param value * int/long/type */ public void visitConstStmt(Op op, int ra, Object value) { if (visitor != null) { visitor.visitConstStmt(op, ra, value); } } public void visitFillArrayDataStmt(Op op, int ra, Object array) { if (visitor != null) { visitor.visitFillArrayDataStmt(op, ra, array); } } public void visitEnd() { if (visitor != null) { visitor.visitEnd(); } } /** * <pre> * OP_IGETX a,b field * OP_IPUTX a,b field * OP_SGETX a field * OP_SPUTX a field * </pre> * * @param op * @param a * @param b * @param field */ public void visitFieldStmt(Op op, int a, int b, Field field) { if (visitor != null) { visitor.visitFieldStmt(op, a, b, field); } } /** * <pre> * OP_FILLED_NEW_ARRAY * </pre> * * @param op * @param args * @param type */ public void visitFilledNewArrayStmt(Op op, int[] args, String type) { if (visitor != null) { visitor.visitFilledNewArrayStmt(op, args, type); } } /** * <pre> * OP_IF_EQ * OP_IF_NE * OP_IF_LT * OP_IF_GE * OP_IF_GT * OP_IF_LE * OP_GOTO * OP_IF_EQZ * OP_IF_NEZ * OP_IF_LTZ * OP_IF_GEZ * OP_IF_GTZ * OP_IF_LEZ * </pre> * * @param op * @param a * @param b * @param label */ public void visitJumpStmt(Op op, int a, int b, DexLabel label) { if (visitor != null) { visitor.visitJumpStmt(op, a, b, label); } } public void visitLabel(DexLabel label) { if (visitor != null) { visitor.visitLabel(label); } } public void visitSparseSwitchStmt(Op op, int ra, int[] cases, DexLabel[] labels) { if (visitor != null) { visitor.visitSparseSwitchStmt(op, ra, cases, labels); } } /** * <pre> * OP_INVOKE_VIRTUAL * OP_INVOKE_SUPER * OP_INVOKE_DIRECT * OP_INVOKE_STATIC * OP_INVOKE_INTERFACE * </pre> * * @param op * @param args * @param method */ public void visitMethodStmt(Op op, int[] args, Method method) { if (visitor != null) { visitor.visitMethodStmt(op, args, method); } } /** * <pre> * OP_MOVE* * a = a X b * OP_ARRAY_LENGTH * a=Xb * X_TO_Y * </pre> * * @param op * @param a * @param b */ public void visitStmt2R(Op op, int a, int b) { if (visitor != null) { visitor.visitStmt2R(op, a, b); } } /** * * {@link Op#RETURN_VOID} {@link Op#NOP} {@link Op#BAD_OP} * * @param op */ public void visitStmt0R(Op op) { if (visitor != null) { visitor.visitStmt0R(op); } } /** * <pre> * OP_RETURN_X * OP_THROW_X * OP_MONITOR_ENTER * OP_MONITOR_EXIT * OP_MOVE_RESULT_X * OP_MOVE_EXCEPTION_X * </pre> * * @param op * @param reg */ public void visitStmt1R(Op op, int reg) { if (visitor != null) { visitor.visitStmt1R(op, reg); } } public void visitPackedSwitchStmt(Op op, int aA, int first_case, DexLabel[] labels) { if (visitor != null) { visitor.visitPackedSwitchStmt(op, aA, first_case, labels); } } public void visitTryCatch(DexLabel start, DexLabel end, DexLabel handler[], String type[]) { if (visitor != null) { visitor.visitTryCatch(start, end, handler, type); } } public DexDebugVisitor visitDebug() { if (visitor != null) { return visitor.visitDebug(); } return null; } }