List of usage examples for org.objectweb.asm Opcodes GETSTATIC
int GETSTATIC
To view the source code for org.objectweb.asm Opcodes GETSTATIC.
Click Source Link
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()]); }