Example usage for org.objectweb.asm Opcodes GETSTATIC

List of usage examples for org.objectweb.asm Opcodes GETSTATIC

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes GETSTATIC.

Prototype

int GETSTATIC

To view the source code for org.objectweb.asm Opcodes GETSTATIC.

Click Source Link

Usage

From source file:com.android.ide.eclipse.apt.internal.analysis.EnumAnalyzer.java

License:Apache License

@Override
protected Collection<Problem> analyzeMethod(MethodNode methodNode) {
    final Collection<Problem> problems = new LinkedList<Problem>();
    final InsnList instructions = methodNode.instructions;
    for (int i = 0; i < instructions.size(); i++) {
        final AbstractInsnNode instruction = instructions.get(i);
        final int op = instruction.getOpcode();
        if (op == Opcodes.GETSTATIC) {
            final FieldInsnNode field = (FieldInsnNode) instruction;
            final String fieldDesc = field.desc;
            final int fieldDescLength = fieldDesc.length();
            if (fieldDescLength > 1) {
                final String type = fieldDesc.substring(1, fieldDesc.length() - 1);
                if (mEnumClasseNames.contains(type)) {
                    final Problem problem = new Problem(instruction);
                    problems.add(problem);
                }/*from   w w w . ja  v a2 s  . c om*/
            }
        }
    }
    return problems;
}

From source file:com.android.ide.eclipse.apt.internal.analysis.InternalGetSetAnalyzer.java

License:Apache License

/**
 * Checks if a method is a getter//from w w w.  j av a  2 s .  c o m
 * @param methodTest The method to test
 * @return True if the method is a getter, false otherwise
 */
private boolean isGetter(final MethodNode methodTest) {
    boolean getter = false;
    final String desc = methodTest.desc;
    final Type[] arguments = Type.getArgumentTypes(desc);
    final Type returnType = Type.getReturnType(desc);
    if (arguments.length == 0 && returnType.getSort() != Type.VOID) {
        final InsnList instructions = methodTest.instructions;
        //three next to skip label and line number instructions
        final AbstractInsnNode first = instructions.getFirst().getNext().getNext();
        final int returnOp = returnType.getOpcode(Opcodes.IRETURN);
        final int firstOp = first.getOpcode();
        //check for static getter
        if ((Opcodes.ACC_STATIC & methodTest.access) == 0) {
            if (firstOp == Opcodes.ALOAD) {
                final AbstractInsnNode second = first.getNext();
                if (second.getOpcode() == Opcodes.GETFIELD) {
                    final AbstractInsnNode third = second.getNext();
                    if (third.getOpcode() == returnOp) {
                        getter = true;
                    }
                }
            }
        } else {
            if (firstOp == Opcodes.GETSTATIC) {
                final AbstractInsnNode second = first.getNext();
                if (second.getOpcode() == returnOp) {
                    getter = true;
                }
            }
        }
    }
    return getter;
}

From source file:com.asakusafw.dag.compiler.codegen.AsmUtil.java

License:Apache License

/**
 * Adds enum constant access.// ww w .  j  a  v  a2s . c  om
 * @param method the target method
 * @param value the target enum constant
 */
public static void getEnumConstant(MethodVisitor method, Enum<?> value) {
    Type type = typeOf(value.getDeclaringClass());
    method.visitFieldInsn(Opcodes.GETSTATIC, type.getInternalName(), value.name(),
            typeOf(value.getDeclaringClass()).getDescriptor());
}

From source file:com.asakusafw.dag.compiler.codegen.AsmUtil.java

License:Apache License

/**
 * Adds enum constant access./*from www  . ja v a 2 s .  c  om*/
 * @param method the target method
 * @param value the target enum constant
 */
public static void getEnumConstant(MethodVisitor method, EnumConstantDescription value) {
    Type type = typeOf(value.getDeclaringClass());
    method.visitFieldInsn(Opcodes.GETSTATIC, type.getInternalName(), value.getName(),
            typeOf(value.getDeclaringClass()).getDescriptor());
}

From source file:com.codename1.tools.translator.bytecodes.Field.java

License:Open Source License

@Override
public boolean assignTo(String varName, StringBuilder sb) {
    if (opcode == Opcodes.GETSTATIC || (opcode == Opcodes.GETFIELD)) {
        StringBuilder b = new StringBuilder();

        if (varName != null) {
            b.append(varName).append(" = ");
        }/*  w w  w  . ja va 2  s .  c  o m*/
        if (opcode == Opcodes.GETSTATIC) {
            b.append("get_static_");
            b.append(owner.replace('/', '_').replace('$', '_'));
            b.append("_");
            b.append(name.replace('/', '_').replace('$', '_'));
            b.append("(threadStateData)");
        } else {

            b.append("get_field_");
            b.append(owner.replace('/', '_').replace('$', '_'));
            b.append("_");
            b.append(name);
            StringBuilder sb3 = new StringBuilder();
            boolean targetProvided = (targetOp != null && targetOp instanceof AssignableExpression
                    && ((AssignableExpression) targetOp).assignTo(null, sb3));
            if (targetProvided) {
                b.append("(").append(sb3.toString().trim()).append(")");
                //} else if (useThis) {
                //    b.append("(__cn1ThisObject)");
            } else {
                return false;
            }

        }
        if (varName != null) {
            b.append(";\n");
        }
        sb.append(b);
        return true;
    }

    return false;
}

From source file:com.codename1.tools.translator.bytecodes.Field.java

License:Open Source License

@Override
public void appendInstruction(StringBuilder sbOut) {
    valueOpAppended = false;/*from   w w w .ja  va2s .c  o m*/
    targetOpAppended = false;
    StringBuilder b = new StringBuilder();
    b.append("    ");
    switch (opcode) {
    case Opcodes.GETSTATIC:
        switch (desc.charAt(0)) {
        case 'L':
        case '[':
            b.append("PUSH_POINTER");
            break;
        case 'D':
            b.append("PUSH_DOUBLE");
            break;
        case 'F':
            b.append("PUSH_FLOAT");
            break;
        case 'J':
            b.append("PUSH_LONG");
            break;
        default:
            b.append("PUSH_INT");
            break;
        }
        b.append("(get_static_");
        b.append(owner.replace('/', '_').replace('$', '_'));
        b.append("_");
        b.append(name.replace('/', '_').replace('$', '_'));
        b.append("(threadStateData));\n");
        break;
    case Opcodes.PUTSTATIC: {
        //b.append("SAFE_RETAIN(1);\n    ");
        b.append("set_static_");
        b.append(owner.replace('/', '_').replace('$', '_'));
        b.append("_");
        b.append(name.replace('/', '_').replace('$', '_'));
        b.append("(threadStateData, ");
        StringBuilder sb2 = new StringBuilder();
        StringBuilder sb3 = new StringBuilder();
        if (valueOp != null && valueOp instanceof AssignableExpression
                && ((AssignableExpression) valueOp).assignTo(null, sb2)) {
            b.append(sb2.toString().trim()).append(");\n");
            valueOpAppended = true;
        } else if (valueOp != null && valueOp instanceof CustomInvoke
                && ((CustomInvoke) valueOp).appendExpression(sb3)) {
            b.append(sb3.toString().trim()).append(");\n");
            valueOpAppended = true;
        } else {

            switch (desc.charAt(0)) {
            case 'L':
            case '[':
                b.append("PEEK_OBJ(1));\n    SP--;\n");
                sbOut.append(b);
                return;
            case 'D':
                b.append("POP_DOUBLE");
                break;
            case 'F':
                b.append("POP_FLOAT");
                break;
            case 'J':
                b.append("POP_LONG");
                break;
            default:
                b.append("POP_INT");
                break;
            }
            b.append("());\n");
        }

        break;
    }
    case Opcodes.GETFIELD: {
        StringBuilder sb3 = new StringBuilder();
        boolean targetProvided = (targetOp != null && targetOp instanceof AssignableExpression
                && ((AssignableExpression) targetOp).assignTo(null, sb3));

        switch (desc.charAt(0)) {
        case 'L':
        case '[':
            b.append("PUSH_POINTER");
            break;
        case 'D':
            b.append("PUSH_DOUBLE");
            break;
        case 'F':
            b.append("PUSH_FLOAT");
            break;
        case 'J':
            b.append("PUSH_LONG");
            break;
        default:
            b.append("PUSH_INT");
            break;
        }

        b.append("(get_field_");
        b.append(owner.replace('/', '_').replace('$', '_'));
        b.append("_");
        b.append(name);

        if (targetProvided) {
            b.append("(").append(sb3.toString().trim()).append("));\n");
            targetOpAppended = true;
            //} else if(useThis) {
            //    b.append("(__cn1ThisObject));\n");
        } else {
            b.append("(POP_OBJ()));\n");
        }
        break;
    }
    case Opcodes.PUTFIELD: {
        //b.append("SAFE_RETAIN(1);\n    ");
        b.append("set_field_");
        b.append(owner.replace('/', '_').replace('$', '_'));
        b.append("_");
        b.append(name);
        b.append("(threadStateData, ");

        StringBuilder sb2 = new StringBuilder();
        StringBuilder sb3 = new StringBuilder();

        String targetLiteral = null;
        String valueLiteral = null;
        if (valueOp != null && valueOp instanceof AssignableExpression
                && ((AssignableExpression) valueOp).assignTo(null, sb2)) {
            valueLiteral = sb2.toString().trim();
        } else if (valueOp != null && valueOp instanceof CustomInvoke
                && ((CustomInvoke) valueOp).appendExpression(sb3)) {
            valueLiteral = sb3.toString().trim();
        }
        sb3.setLength(0);
        if (targetOp != null && targetOp instanceof AssignableExpression
                && ((AssignableExpression) targetOp).assignTo(null, sb3)) {
            targetLiteral = sb3.toString().trim();
        }

        if (valueLiteral != null && targetLiteral != null) {
            b.append(valueLiteral).append(", ").append(targetLiteral).append(");\n");
            valueOpAppended = true;
            targetOpAppended = true;
        } else {
            switch (desc.charAt(0)) {
            case 'L':
            case '[':
                b.append("PEEK_OBJ");
                //if(useThis) {
                //    b.append("(1), __cn1ThisObject);\n    SP--;\n");
                //} else {
                b.append("(1), PEEK_OBJ(2));\n    POP_MANY(2);\n");
                //}
                sbOut.append(b);
                return;
            case 'D':
                b.append("POP_DOUBLE");
                break;
            case 'F':
                b.append("POP_FLOAT");
                break;
            case 'J':
                b.append("POP_LONG");
                break;
            default:
                b.append("POP_INT");
                break;
            }
            //if(useThis) {
            //    b.append("(), __cn1ThisObject);\n");
            //} else {
            b.append("(), POP_OBJ());\n");
            //}
        }
        break;
    }
    }
    if (valueOp != null && !valueOpAppended) {
        valueOp.appendInstruction(sbOut);
        valueOpAppended = true;
    }
    if (targetOp != null && !targetOpAppended) {
        targetOp.appendInstruction(sbOut);
        targetOpAppended = true;
    }
    sbOut.append(b);
}

From source file:com.e2info.helloasm.HelloAsmApp.java

License:Open Source License

public static void main(String[] args) throws IOException {
    String name = "HelloAsm";
    int flag = ClassWriter.COMPUTE_MAXS;
    ClassWriter cw = new ClassWriter(flag);
    cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, name, null, "java/lang/Object", null);

    cw.visitSource(name + ".java", null);

    {/*  w ww.j a  v  a 2 s. co  m*/
        MethodVisitor mv;
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
        mv.visitCode();
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
        mv.visitInsn(Opcodes.RETURN);
        // we need this call to take effect ClassWriter.COMPUTE_MAXS flag.
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }

    {
        MethodVisitor mv;
        mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "main", "([Ljava/lang/String;)V", null,
                null);
        mv.visitCode();
        mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
        mv.visitLdcInsn("hello ASM");
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
        mv.visitInsn(Opcodes.RETURN);
        // we need this call to take effect ClassWriter.COMPUTE_MAXS flag.
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }

    cw.visitEnd();

    // build binary
    byte[] bin = cw.toByteArray();

    // save asm trace for human readable
    {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        new ClassReader(bin).accept(new TraceClassVisitor(pw), 0);
        File f = new File(name + ".txt");
        FileUtils.writeStringToFile(f, sw.toString());
    }

    // save as calss file
    {
        File f = new File(name + ".class");
        FileUtils.writeByteArrayToFile(f, bin);
    }

}

From source file:com.enea.jcarder.agent.instrument.StackAnalyzeMethodVisitor.java

License:GNU General Public License

public void visitFieldInsn(int opCode, String owner, String name, String desc) {
    mMethodVisitor.visitFieldInsn(opCode, owner, name, desc);
    switch (opCode) {
    case Opcodes.GETFIELD:
        pop();// w w w  .  ja va 2  s  .com
        pushTextualDescription(owner + "." + name);
        break;
    case Opcodes.GETSTATIC:
        pushTextualDescription(owner + "." + name);
        break;
    default:
        clear();
    }
}

From source file:com.github.anba.es6draft.compiler.assembler.InstructionAssembler.java

License:Open Source License

public void getstatic(Type owner, String name, Type desc) {
    methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, owner.internalName(), name, desc.descriptor());
    stack.getstatic(desc);
}

From source file:com.github.jasmo.obfuscate.InlineAccessors.java

License:Open Source License

private Query[] getPattern(boolean get, ClassNode owner, FieldNode field) {
    Type type = Type.getType(field.desc);
    List<Query> queries = new LinkedList<>();
    boolean local = local(field.access);
    if (local)//from  w ww  .j  a  v a  2 s  .  c  om
        queries.add(new Query("opcode", Opcodes.ALOAD, "var", 0));
    if (get) {
        int opcode = local ? Opcodes.GETFIELD : Opcodes.GETSTATIC;
        queries.add(new Query("opcode", opcode, "owner", owner.name, "name", field.name, "desc", field.desc));
        queries.add(new Query("opcode", type.getOpcode(Opcodes.IRETURN)));
    } else {
        int opcode = local ? Opcodes.PUTFIELD : Opcodes.PUTSTATIC;
        queries.add(new Query("opcode", type.getOpcode(Opcodes.ILOAD), "var", 0));
        queries.add(new Query("opcode", opcode, "owner", owner.name, "name", field.name, "desc", field.desc));
        queries.add(new Query("opcode", Opcodes.RETURN));
    }
    return queries.toArray(new Query[queries.size()]);
}