pxb.android.dex2jar.optimize.Util.java Source code

Java tutorial

Introduction

Here is the source code for pxb.android.dex2jar.optimize.Util.java

Source

/*
 * Copyright (c) 2009-2010 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 pxb.android.dex2jar.optimize;

import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.VarInsnNode;

/**
 * @author Panxiaobo [pxb1988@126.com]
 * @version $Id$
 */
public class Util implements Opcodes {
    public static boolean needBreak(AbstractInsnNode ins) {
        switch (ins.getType()) {
        case AbstractInsnNode.JUMP_INSN:
        case AbstractInsnNode.LOOKUPSWITCH_INSN:
        case AbstractInsnNode.TABLESWITCH_INSN:
        case AbstractInsnNode.LABEL:
            return true;
        }
        return false;
    }

    public static int var(AbstractInsnNode p) {
        return ((VarInsnNode) p).var;
    }

    public static void var(AbstractInsnNode p, int r) {
        ((VarInsnNode) p).var = r;
    }

    public static boolean isWrite(AbstractInsnNode p) {
        if (p instanceof VarInsnNode) {
            VarInsnNode q = (VarInsnNode) p;
            switch (q.getOpcode()) {
            case ISTORE:
            case LSTORE:
            case DSTORE:
            case FSTORE:
            case ASTORE:
                return true;
            }
        }
        return false;
    }

    public static boolean isSameVar(AbstractInsnNode p, AbstractInsnNode q) {
        return ((VarInsnNode) p).var == ((VarInsnNode) q).var;
    }

    public static boolean isRead(AbstractInsnNode p) {
        if (p instanceof VarInsnNode) {
            VarInsnNode q = (VarInsnNode) p;
            switch (q.getOpcode()) {
            case ILOAD:
            case DLOAD:
            case LLOAD:
            case FLOAD:
            case ALOAD:
                return true;
            }
        }
        return false;
    }

    public static boolean isEnd(AbstractInsnNode p) {
        switch (p.getOpcode()) {
        case ATHROW:
        case RETURN:
        case IRETURN:
        case LRETURN:
        case FRETURN:
        case DRETURN:
            return true;
        }
        return false;
    }
}