List of usage examples for org.objectweb.asm MethodVisitor visitLabel
public void visitLabel(final Label label)
From source file:org.chromium.bytecode.CustomResourcesClassAdapter.java
License:Open Source License
/** * Generates:/*from ww w . j a v a 2 s . c om*/ * * <pre> * public Context createConfigurationContext(Configuration configuration) { * // createConfigurationContext does not exist before API level 17. * if (Build.VERSION.SDK_INT < 17) return null; * if (!BuildHooksAndroid.isEnabled()) return super.createConfigurationContext(configuration); * return BuildHooksAndroid.createConfigurationContext( * super.createConfigurationContext(configuration)); * } * </pre> * } */ private void delegateCreateConfigurationContext() { String methodName = "createConfigurationContext"; String methodDescriptor = TypeUtils.getMethodDescriptor(CONTEXT, CONFIGURATION); MethodVisitor mv = super.visitMethod(ACC_PUBLIC, methodName, methodDescriptor, null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, "android/os/Build$VERSION", "SDK_INT", INT); mv.visitIntInsn(BIPUSH, 17); Label l0 = new Label(); mv.visitJumpInsn(IF_ICMPGE, l0); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, IS_ENABLED_METHOD, IS_ENABLED_DESCRIPTOR, false); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, mSuperClassName, methodName, methodDescriptor, false); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, mSuperClassName, methodName, methodDescriptor, false); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, methodName, TypeUtils.getMethodDescriptor(CONTEXT, CONTEXT), false); mv.visitInsn(ARETURN); mv.visitMaxs(2, 2); mv.visitEnd(); }
From source file:org.chromium.bytecode.CustomResourcesClassAdapter.java
License:Open Source License
/** * Generates:/*from w w w . j a v a 2 s. c om*/ * * <pre> * public void setTheme(int theme) { * if (!BuildHooksAndroid.isEnabled()) { * super.setTheme(theme); * return; * } * BuildHooksAndroid.setTheme(this, theme); * } * </pre> */ private void delegateSetTheme() { String methodName = "setTheme"; String methodDescriptor = TypeUtils.getMethodDescriptor(VOID, INT); String buildHooksMethodDescriptor = TypeUtils.getMethodDescriptor(VOID, CONTEXT, INT); MethodVisitor mv = super.visitMethod(ACC_PUBLIC, methodName, methodDescriptor, null, null); mv.visitCode(); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, IS_ENABLED_METHOD, IS_ENABLED_DESCRIPTOR, false); Label l0 = new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESPECIAL, mSuperClassName, methodName, methodDescriptor, false); mv.visitInsn(RETURN); mv.visitLabel(l0); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, methodName, buildHooksMethodDescriptor, false); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); }
From source file:org.chromium.bytecode.CustomResourcesClassAdapter.java
License:Open Source License
/** * Generates:// www . ja v a 2 s .co m * * <pre> * public returnType methodName() { * if (!BuildHooksAndroid.isEnabled()) return super.methodName(); * return BuildHooksAndroid.methodName(this); * } * </pre> */ private void delegateGet(String methodName, String returnType) { String getMethodDescriptor = TypeUtils.getMethodDescriptor(returnType); String buildHooksGetMethodDescriptor = TypeUtils.getMethodDescriptor(returnType, CONTEXT); MethodVisitor mv = super.visitMethod(ACC_PUBLIC, methodName, getMethodDescriptor, null, null); mv.visitCode(); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, IS_ENABLED_METHOD, IS_ENABLED_DESCRIPTOR, false); Label l0 = new Label(); mv.visitJumpInsn(IFNE, l0); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, mSuperClassName, methodName, getMethodDescriptor, false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, BUILD_HOOKS_ANDROID, methodName, buildHooksGetMethodDescriptor, false); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:org.codehaus.aspectwerkz.aspect.container.LazyPerXFactoryCompiler.java
License:Open Source License
protected void createAspectOf() { m_cw.visitField(ACC_PRIVATE + ACC_STATIC, FACTORY_ASPECTS_FIELD_NAME, MAP_CLASS_SIGNATURE, null, null); m_clinit.visitTypeInsn(NEW, "java/util/WeakHashMap"); m_clinit.visitInsn(DUP);/* www .j ava2s .c o m*/ m_clinit.visitMethodInsn(INVOKESPECIAL, "java/util/WeakHashMap", INIT_METHOD_NAME, NO_PARAM_RETURN_VOID_SIGNATURE); m_clinit.visitFieldInsn(PUTSTATIC, m_aspectFactoryClassName, FACTORY_ASPECTS_FIELD_NAME, MAP_CLASS_SIGNATURE); MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_FINAL, FACTORY_ASPECTOF_METHOD_NAME, "(" + getXSignature() + ")" + m_aspectClassSignature, null, null); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_ASPECTS_FIELD_NAME, MAP_CLASS_SIGNATURE); cv.visitVarInsn(ALOAD, 0);//Class cv.visitMethodInsn(INVOKEINTERFACE, MAP_CLASS_NAME, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); cv.visitVarInsn(ASTORE, 1); cv.visitVarInsn(ALOAD, 1); Label ifBound = new Label(); cv.visitJumpInsn(IFNONNULL, ifBound); if (m_hasAspectContainer) { cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CONTAINER_FIELD_NAME, ASPECT_CONTAINER_CLASS_SIGNATURE); cv.visitMethodInsn(INVOKEINTERFACE, ASPECT_CONTAINER_CLASS_NAME, ASPECT_CONTAINER_ASPECTOF_METHOD_NAME, "(" + getXSignature() + ")Ljava/lang/Object;"); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); } else { cv.visitTypeInsn(NEW, m_aspectClassName); cv.visitInsn(DUP); cv.visitMethodInsn(INVOKESPECIAL, m_aspectClassName, INIT_METHOD_NAME, NO_PARAM_RETURN_VOID_SIGNATURE); } cv.visitVarInsn(ASTORE, 2); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_ASPECTS_FIELD_NAME, MAP_CLASS_SIGNATURE); cv.visitVarInsn(ALOAD, 0); cv.visitVarInsn(ALOAD, 2); cv.visitMethodInsn(INVOKEINTERFACE, MAP_CLASS_NAME, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); cv.visitVarInsn(ALOAD, 2); cv.visitInsn(ARETURN); cv.visitLabel(ifBound); cv.visitVarInsn(ALOAD, 1); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); cv.visitInsn(ARETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerCflowXAspectFactoryCompiler.java
License:Open Source License
/** * Overrides the aspectOf() method to not do lazy aspect instantiation since controlled by bind()/unbind() *//*from ww w.j a v a 2 s .co m*/ protected void createAspectOf() { m_cw.visitField(ACC_PRIVATE + ACC_STATIC, "ASPECTS", MAP_CLASS_SIGNATURE, null, null); m_clinit.visitTypeInsn(NEW, MAP_CLASS_NAME); m_clinit.visitInsn(DUP); m_clinit.visitMethodInsn(INVOKESPECIAL, "java/util/WeakHashMap", INIT_METHOD_NAME, "()V"); m_clinit.visitFieldInsn(PUTSTATIC, m_aspectFactoryClassName, "ASPECTS", MAP_CLASS_SIGNATURE); MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_FINAL, "aspectOf", "(" + getXSignature() + ")" + m_aspectClassSignature, null, null); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, "ASPECTS", MAP_CLASS_SIGNATURE); cv.visitVarInsn(ALOAD, 0);//Thread cv.visitMethodInsn(INVOKEINTERFACE, MAP_CLASS_NAME, "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); cv.visitVarInsn(ASTORE, 1); cv.visitVarInsn(ALOAD, 1); Label ifBound = new Label(); cv.visitJumpInsn(IFNONNULL, ifBound); cv.visitTypeInsn(NEW, Type.getInternalName(NoAspectBoundException.class)); cv.visitInsn(DUP); cv.visitLdcInsn("Not bound"); cv.visitLdcInsn(m_aspectQualifiedName); cv.visitMethodInsn(INVOKESPECIAL, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME, INIT_METHOD_NAME, "(Ljava/lang/String;Ljava/lang/String;)V"); cv.visitInsn(ATHROW); cv.visitLabel(ifBound); cv.visitVarInsn(ALOAD, 1); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); cv.visitInsn(ARETURN); // create an implicit Thread.currentThread no arg aspectOf() method cv = m_cw.visitMethod(ACC_STATIC + ACC_PUBLIC + ACC_FINAL, "aspectOf", "()" + m_aspectClassSignature, null, null); cv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Thread.class), "currentThread", "()Ljava/lang/Thread;"); cv.visitMethodInsn(INVOKESTATIC, m_aspectFactoryClassName, "aspectOf", "(Ljava/lang/Thread;)" + getXSignature()); cv.visitInsn(ARETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerJVMAspectFactoryCompiler.java
License:Open Source License
protected void createAspectOf() { m_cw.visitField(ACC_PRIVATE + ACC_STATIC, FACTORY_SINGLEASPECT_FIELD_NAME, m_aspectClassSignature, null, null);//from w w w . j av a 2s .c o m MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_FINAL, FACTORY_ASPECTOF_METHOD_NAME, "()" + m_aspectClassSignature, null, null); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_SINGLEASPECT_FIELD_NAME, m_aspectClassSignature); Label ifNonNull = new Label(); cv.visitJumpInsn(IFNONNULL, ifNonNull); if (m_hasAspectContainer) { cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CONTAINER_FIELD_NAME, ASPECT_CONTAINER_CLASS_SIGNATURE); cv.visitMethodInsn(INVOKEINTERFACE, ASPECT_CONTAINER_CLASS_NAME, ASPECT_CONTAINER_ASPECTOF_METHOD_NAME, ASPECT_CONTAINER_ASPECTOF_PERJVM_METHOD_SIGNATURE); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); } else { cv.visitTypeInsn(NEW, m_aspectClassName); cv.visitInsn(DUP); cv.visitMethodInsn(INVOKESPECIAL, m_aspectClassName, INIT_METHOD_NAME, NO_PARAM_RETURN_VOID_SIGNATURE); } cv.visitFieldInsn(PUTSTATIC, m_aspectFactoryClassName, FACTORY_SINGLEASPECT_FIELD_NAME, m_aspectClassSignature); cv.visitLabel(ifNonNull); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_SINGLEASPECT_FIELD_NAME, m_aspectClassSignature); cv.visitInsn(ARETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerJVMAspectFactoryCompiler.java
License:Open Source License
protected void createHasAspect() { MethodVisitor cv = m_cw.visitMethod(ACC_STATIC + ACC_PUBLIC + ACC_FINAL, FACTORY_HASASPECT_METHOD_NAME, NO_PARAM_RETURN_BOOLEAN_SIGNATURE, null, null); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_SINGLEASPECT_FIELD_NAME, m_aspectClassSignature);//w w w .j a v a 2s . c o m Label ifNonNull = new Label(); cv.visitJumpInsn(IFNONNULL, ifNonNull); cv.visitInsn(ICONST_0); cv.visitInsn(IRETURN); cv.visitLabel(ifNonNull); cv.visitInsn(ICONST_1); cv.visitInsn(IRETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerObjectFactoryCompiler.java
License:Open Source License
protected void createAspectOf() { MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_FINAL, FACTORY_ASPECTOF_METHOD_NAME, "(Ljava/lang/Object;)" + m_aspectClassSignature, null, null); // instanceOf check cv.visitVarInsn(ALOAD, 0);// object cv.visitTypeInsn(INSTANCEOF, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); Label ifInstanceOf = new Label(); cv.visitJumpInsn(IFNE, ifInstanceOf); cv.visitTypeInsn(NEW, Type.getInternalName(NoAspectBoundException.class)); cv.visitInsn(DUP);/*from www .j a va2s . c om*/ cv.visitLdcInsn("Unimplemented interface"); cv.visitLdcInsn(m_aspectQualifiedName); cv.visitMethodInsn(INVOKESPECIAL, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME, INIT_METHOD_NAME, "(Ljava/lang/String;Ljava/lang/String;)V"); cv.visitInsn(ATHROW); cv.visitLabel(ifInstanceOf); cv.visitVarInsn(ALOAD, 0); cv.visitTypeInsn(CHECKCAST, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CLASS_FIELD_NAME, CLASS_CLASS_SIGNATURE); cv.visitMethodInsn(INVOKEINTERFACE, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME, INSTANCE_LEVEL_GETASPECT_METHOD_NAME, INSTANCE_LEVEL_GETASPECT_METHOD_SIGNATURE); cv.visitVarInsn(ASTORE, 1); cv.visitVarInsn(ALOAD, 1); Label ifBound = new Label(); cv.visitJumpInsn(IFNONNULL, ifBound); cv.visitTypeInsn(NEW, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME); cv.visitInsn(DUP); cv.visitLdcInsn("Not bound"); cv.visitLdcInsn(m_aspectQualifiedName); cv.visitMethodInsn(INVOKESPECIAL, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME, INIT_METHOD_NAME, "(Ljava/lang/String;Ljava/lang/String;)V"); cv.visitInsn(ATHROW); cv.visitLabel(ifBound); cv.visitVarInsn(ALOAD, 1); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); cv.visitInsn(ARETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerObjectFactoryCompiler.java
License:Open Source License
protected void createHasAspect() { MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC, FACTORY_HASASPECT_METHOD_NAME, "(Ljava/lang/Object;)Z", null, null); // instanceOf check cv.visitVarInsn(ALOAD, 0);// object cv.visitTypeInsn(INSTANCEOF, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); Label ifInstanceOf = new Label(); cv.visitJumpInsn(IFNE, ifInstanceOf); cv.visitInsn(ICONST_0);/*from w ww .ja v a2 s . c o m*/ cv.visitInsn(IRETURN); cv.visitLabel(ifInstanceOf); cv.visitVarInsn(ALOAD, 0); cv.visitTypeInsn(CHECKCAST, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CLASS_FIELD_NAME, CLASS_CLASS_SIGNATURE); cv.visitMethodInsn(INVOKEINTERFACE, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME, INSTANCE_LEVEL_HASASPECT_METHOD_NAME, INSTANCE_LEVEL_HASASPECT_METHOD_SIGNATURE); cv.visitInsn(IRETURN); cv.visitMaxs(0, 0); }
From source file:org.codehaus.aspectwerkz.aspect.container.PerObjectFactoryCompiler.java
License:Open Source License
private void createBindMethod() { MethodVisitor cv = m_cw.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_FINAL, "bind", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null); // instanceOf check cv.visitVarInsn(ALOAD, 0);// object cv.visitTypeInsn(INSTANCEOF, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); Label ifInstanceOf = new Label(); cv.visitJumpInsn(IFNE, ifInstanceOf); cv.visitTypeInsn(NEW, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME); cv.visitInsn(DUP);//from w w w . j av a 2 s. co m cv.visitLdcInsn("Unimplemented interface"); cv.visitLdcInsn(m_aspectQualifiedName); cv.visitMethodInsn(INVOKESPECIAL, NO_ASPECT_BOUND_EXCEPTION_CLASS_NAME, INIT_METHOD_NAME, "(Ljava/lang/String;Ljava/lang/String;)V"); cv.visitInsn(ATHROW); cv.visitLabel(ifInstanceOf); cv.visitVarInsn(ALOAD, 0);//object cv.visitTypeInsn(CHECKCAST, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CLASS_FIELD_NAME, CLASS_CLASS_SIGNATURE); cv.visitMethodInsn(INVOKEINTERFACE, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME, INSTANCE_LEVEL_GETASPECT_METHOD_NAME, INSTANCE_LEVEL_GETASPECT_METHOD_SIGNATURE); cv.visitVarInsn(ASTORE, 1); cv.visitVarInsn(ALOAD, 1); Label ifAlreadyBound = new Label(); cv.visitJumpInsn(IFNONNULL, ifAlreadyBound); // target instance and arg0 for bind call cv.visitVarInsn(ALOAD, 0);//object cv.visitTypeInsn(CHECKCAST, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME); cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CLASS_FIELD_NAME, CLASS_CLASS_SIGNATURE); if (m_hasAspectContainer) { cv.visitFieldInsn(GETSTATIC, m_aspectFactoryClassName, FACTORY_CONTAINER_FIELD_NAME, ASPECT_CONTAINER_CLASS_SIGNATURE); cv.visitVarInsn(ALOAD, 0);//associated object cv.visitMethodInsn(INVOKEINTERFACE, ASPECT_CONTAINER_CLASS_NAME, ASPECT_CONTAINER_ASPECTOF_METHOD_NAME, "(Ljava/lang/Object;)Ljava/lang/Object;"); cv.visitTypeInsn(CHECKCAST, m_aspectClassName); } else { cv.visitTypeInsn(NEW, m_aspectClassName); cv.visitInsn(DUP); cv.visitMethodInsn(INVOKESPECIAL, m_aspectClassName, INIT_METHOD_NAME, NO_PARAM_RETURN_VOID_SIGNATURE); } cv.visitMethodInsn(INVOKEINTERFACE, HAS_INSTANCE_LEVEL_ASPECT_INTERFACE_NAME, INSTANCE_LEVEL_BINDASPECT_METHOD_NAME, INSTANCE_LEVEL_BINDASPECT_METHOD_SIGNATURE); cv.visitInsn(ARETURN); cv.visitLabel(ifAlreadyBound); cv.visitVarInsn(ALOAD, 1); cv.visitInsn(ARETURN); cv.visitMaxs(0, 0); }