List of usage examples for org.objectweb.asm Opcodes PUTSTATIC
int PUTSTATIC
To view the source code for org.objectweb.asm Opcodes PUTSTATIC.
Click Source Link
From source file:com.android.ide.eclipse.apt.internal.analysis.ConstantFinalAnalyzer.java
License:Apache License
@Override protected Collection<Problem> analyzeMethod(final MethodNode methodNode) { final LinkedList<Problem> problems = new LinkedList<Problem>(); final InsnList instructions = methodNode.instructions; for (int i = 0; i < instructions.size(); i++) { final AbstractInsnNode insnNode = instructions.get(i); if (insnNode.getOpcode() == Opcodes.PUTSTATIC) { final FieldInsnNode field = (FieldInsnNode) insnNode; final String fieldName = field.name; if (!isFinal(fieldName)) { final Problem problem = new Problem(insnNode); problems.add(problem);/*w w w. jav a 2 s . c o m*/ } } } return problems; }
From source file:com.android.ide.eclipse.apt.internal.analysis.InternalGetSetAnalyzer.java
License:Apache License
/** * Checks if a method is a setter/*from w w w . ja v a2 s . co m*/ * @param methodTest The method to be checked * @return True if the method is a setter, false otherwise */ private boolean isSetter(final MethodNode methodTest) { boolean setter = false; final String desc = methodTest.desc; final Type[] arguments = Type.getArgumentTypes(desc); final Type returnType = Type.getReturnType(desc); if (arguments.length == 1 && returnType.getSort() == Type.VOID) { final InsnList instructions = methodTest.instructions; //skip label and line number instructions final AbstractInsnNode first = instructions.getFirst().getNext().getNext(); final int loadOp = arguments[0].getOpcode(Opcodes.ILOAD); final int firstOp = first.getOpcode(); //check for static setter if ((Opcodes.ACC_STATIC & methodTest.access) == 0) { if (firstOp == Opcodes.ALOAD) { final AbstractInsnNode second = first.getNext(); if (second.getOpcode() == loadOp) { final AbstractInsnNode third = second.getNext(); if (third.getOpcode() == Opcodes.PUTFIELD) { //three next to skip label and line number instructions final AbstractInsnNode fourth = third.getNext().getNext().getNext(); if (fourth.getOpcode() == Opcodes.RETURN) { setter = true; } } } } } else { if (firstOp == loadOp) { final AbstractInsnNode second = first.getNext(); if (second.getOpcode() == Opcodes.PUTSTATIC) { final AbstractInsnNode third = second.getNext().getNext().getNext(); if (third.getOpcode() == Opcodes.RETURN) { setter = true; } } } } } return setter; }
From source file:com.android.tools.lint.checks.CordovaVersionDetector.java
License:Apache License
private void checkInstructionInternal(ClassContext context, ClassNode classNode, AbstractInsnNode instruction) { FieldInsnNode node = (FieldInsnNode) instruction; if (node.getOpcode() == Opcodes.PUTSTATIC && node.owner.equals(FQN_CORDOVA_DEVICE) && node.name.equals(FIELD_NAME_CORDOVA_VERSION)) { AbstractInsnNode prevInstruction = LintUtils.getPrevInstruction(node); if (prevInstruction == null || prevInstruction.getOpcode() != Opcodes.LDC) { return; }/*from w w w. j ava 2s.co m*/ LdcInsnNode ldcInsnNode = (LdcInsnNode) prevInstruction; if (ldcInsnNode.cst instanceof String) { mCordovaVersion = createVersion((String) ldcInsnNode.cst); if (mCordovaVersion != null) { validateCordovaVersion(context, mCordovaVersion, context.getLocation(classNode)); } } } }
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 .j av a 2s. co 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.codename1.tools.translator.bytecodes.Field.java
License:Open Source License
/** * @param useThis the useThis to set/*from w w w . j a v a 2 s . c o m*/ */ //public void setUseThis(boolean useThis) { // this.useThis = useThis; //} public static int tryReduce(List<Instruction> instructions, int index) { Instruction instr = instructions.get(index); if (!(instr instanceof Field)) { return -1; } if (instr.getOpcode() == Opcodes.PUTFIELD) { if (index < 2) { return -1; } Field f = (Field) instr; if (f.targetOp != null || f.valueOp != null) { return -1; } Instruction targetInstr = instructions.get(index - 2); if (!(targetInstr instanceof AssignableExpression)) { return -1; } Instruction valueInstr = instructions.get(index - 1); if (!(valueInstr instanceof AssignableExpression)) { return -1; } StringBuilder sb = new StringBuilder(); AssignableExpression targetExpr = (AssignableExpression) targetInstr; if (!targetExpr.assignTo(null, sb)) { return -1; } AssignableExpression valueExpr = (AssignableExpression) valueInstr; if (!valueExpr.assignTo(null, sb)) { return -1; } f.targetOp = targetInstr; f.valueOp = valueInstr; instructions.remove(index - 2); instructions.remove(index - 2); return index - 2; } else if (instr.getOpcode() == Opcodes.PUTSTATIC) { if (index < 1) { return -1; } Field f = (Field) instr; if (f.valueOp != null) { return -1; } Instruction valueInstr = instructions.get(index - 1); if (!(valueInstr instanceof AssignableExpression)) { return -1; } StringBuilder sb = new StringBuilder(); AssignableExpression valueExpr = (AssignableExpression) valueInstr; if (!valueExpr.assignTo(null, sb)) { return -1; } f.valueOp = valueInstr; instructions.remove(index - 1); return index - 1; } else if (instr.getOpcode() == Opcodes.GETFIELD) { if (index < 1) { return -1; } Field f = (Field) instr; //if (f.useThis) { // return -1; //} Instruction targetInstr = instructions.get(index - 1); if (!(targetInstr instanceof AssignableExpression)) { return -1; } StringBuilder sb = new StringBuilder(); AssignableExpression targetExpr = (AssignableExpression) targetInstr; if (!targetExpr.assignTo(null, sb)) { return -1; } f.targetOp = targetInstr; instructions.remove(index - 1); return index - 1; } return -1; }
From source file:com.github.anba.es6draft.compiler.assembler.InstructionAssembler.java
License:Open Source License
public void putstatic(Type owner, String name, Type desc) { methodVisitor.visitFieldInsn(Opcodes.PUTSTATIC, owner.internalName(), name, desc.descriptor()); stack.putstatic(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)/*w ww .j av 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()]); }
From source file:com.github.megatronking.stringfog.plugin.StringFogClassVisitor.java
License:Apache License
@Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); if (mv != null && !mIgnoreClass) { if ("<clinit>".equals(name)) { isClInitExists = true;/*from w ww . jav a 2s . co m*/ // If clinit exists meaning the static fields (not final) would have be inited here. mv = new MethodVisitor(Opcodes.ASM5, mv) { private String lastStashCst; @Override public void visitCode() { super.visitCode(); // Here init static final fields. for (ClassStringField field : mStaticFinalFields) { if (!canEncrypted(field.value)) { continue; } String originValue = field.value; String encryptValue = mStringFogImpl.encrypt(originValue, mKey); mMappingPrinter.output(getJavaClassName(), originValue, encryptValue); super.visitLdcInsn(encryptValue); super.visitMethodInsn(Opcodes.INVOKESTATIC, mFogClassName, "decrypt", "(Ljava/lang/String;)Ljava/lang/String;", false); super.visitFieldInsn(Opcodes.PUTSTATIC, mClassName, field.name, ClassStringField.STRING_DESC); } } @Override public void visitLdcInsn(Object cst) { // Here init static or static final fields, but we must check field name int 'visitFieldInsn' if (cst != null && cst instanceof String && canEncrypted((String) cst)) { lastStashCst = (String) cst; String originValue = lastStashCst; String encryptValue = mStringFogImpl.encrypt(originValue, mKey); mMappingPrinter.output(getJavaClassName(), originValue, encryptValue); super.visitLdcInsn(encryptValue); super.visitMethodInsn(Opcodes.INVOKESTATIC, mFogClassName, "decrypt", "(Ljava/lang/String;)Ljava/lang/String;", false); } else { lastStashCst = null; super.visitLdcInsn(cst); } } @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { if (mClassName.equals(owner) && lastStashCst != null) { boolean isContain = false; for (ClassStringField field : mStaticFields) { if (field.name.equals(name)) { isContain = true; break; } } if (!isContain) { for (ClassStringField field : mStaticFinalFields) { if (field.name.equals(name) && field.value == null) { field.value = lastStashCst; break; } } } } lastStashCst = null; super.visitFieldInsn(opcode, owner, name, desc); } }; } else if ("<init>".equals(name)) { // Here init final(not static) and normal fields mv = new MethodVisitor(Opcodes.ASM5, mv) { @Override public void visitLdcInsn(Object cst) { // We don't care about whether the field is final or normal if (cst != null && cst instanceof String && canEncrypted((String) cst)) { String originValue = (String) cst; String encryptValue = mStringFogImpl.encrypt(originValue, mKey); mMappingPrinter.output(getJavaClassName(), originValue, encryptValue); super.visitLdcInsn(encryptValue); super.visitMethodInsn(Opcodes.INVOKESTATIC, mFogClassName, "decrypt", "(Ljava/lang/String;)Ljava/lang/String;", false); } else { super.visitLdcInsn(cst); } } }; } else { mv = new MethodVisitor(Opcodes.ASM5, mv) { @Override public void visitLdcInsn(Object cst) { if (cst != null && cst instanceof String && canEncrypted((String) cst)) { // If the value is a static final field for (ClassStringField field : mStaticFinalFields) { if (cst.equals(field.value)) { super.visitFieldInsn(Opcodes.GETSTATIC, mClassName, field.name, ClassStringField.STRING_DESC); return; } } // If the value is a final field (not static) for (ClassStringField field : mFinalFields) { // if the value of a final field is null, we ignore it if (cst.equals(field.value)) { super.visitVarInsn(Opcodes.ALOAD, 0); super.visitFieldInsn(Opcodes.GETFIELD, mClassName, field.name, "Ljava/lang/String;"); return; } } // local variables String originValue = (String) cst; String encryptValue = mStringFogImpl.encrypt(originValue, mKey); mMappingPrinter.output(getJavaClassName(), originValue, encryptValue); super.visitLdcInsn(encryptValue); super.visitMethodInsn(Opcodes.INVOKESTATIC, mFogClassName, "decrypt", "(Ljava/lang/String;)Ljava/lang/String;", false); return; } super.visitLdcInsn(cst); } }; } } return mv; }
From source file:com.github.megatronking.stringfog.plugin.StringFogClassVisitor.java
License:Apache License
@Override public void visitEnd() { if (!mIgnoreClass && !isClInitExists && !mStaticFinalFields.isEmpty()) { MethodVisitor mv = super.visitMethod(Opcodes.ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode();/*from w w w . j a v a2 s . c om*/ // Here init static final fields. for (ClassStringField field : mStaticFinalFields) { if (!canEncrypted(field.value)) { continue; } String originValue = field.value; String encryptValue = mStringFogImpl.encrypt(originValue, mKey); mMappingPrinter.output(getJavaClassName(), originValue, encryptValue); mv.visitLdcInsn(encryptValue); mv.visitMethodInsn(Opcodes.INVOKESTATIC, mFogClassName, "decrypt", "(Ljava/lang/String;)Ljava/lang/String;", false); mv.visitFieldInsn(Opcodes.PUTSTATIC, mClassName, field.name, ClassStringField.STRING_DESC); } mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(1, 0); mv.visitEnd(); } super.visitEnd(); }
From source file:com.google.devtools.build.android.desugar.BytecodeTypeInference.java
License:Open Source License
@Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { switch (opcode) { case Opcodes.GETSTATIC: pushDescriptor(desc);// w ww . j ava2s . c o m break; case Opcodes.PUTSTATIC: popDescriptor(desc); break; case Opcodes.GETFIELD: pop(); pushDescriptor(desc); break; case Opcodes.PUTFIELD: popDescriptor(desc); pop(); break; default: throw new RuntimeException( "Unhandled opcode " + opcode + ", owner=" + owner + ", name=" + name + ", desc" + desc); } super.visitFieldInsn(opcode, owner, name, desc); }