jodd.proxetta.asm
Class ProxettaCreator

java.lang.Object
  extended by jodd.proxetta.asm.EmptyVisitor
      extended by jodd.proxetta.asm.ProxettaCreator
All Implemented Interfaces:
org.objectweb.asm.ClassVisitor, org.objectweb.asm.FieldVisitor, org.objectweb.asm.MethodVisitor

public class ProxettaCreator
extends EmptyVisitor

Creates the proxy subclass using ASM library.


Field Summary
protected  ProxyAspect[] aspects
           
protected  org.objectweb.asm.ClassWriter cw
           
protected  jodd.proxetta.asm.DestinationData dd
           
protected  org.objectweb.asm.ClassVisitor dest
           
protected  java.lang.String nextSupername
           
protected  boolean proxyApplied
           
protected  jodd.proxetta.asm.ProxyAspectData[] proxyAspects
           
protected static int suffix
           
protected  java.lang.String superReference
           
protected  java.lang.String targetClassname
           
protected  java.lang.String targetPackage
           
protected  java.lang.String thisReference
           
protected  java.util.Set<java.lang.String> topMethodSignatures
           
protected  boolean variableClassName
           
 
Constructor Summary
ProxettaCreator(ProxyAspect... aspects)
           
 
Method Summary
 ProxettaCreator accept(java.lang.Class target)
           
 ProxettaCreator accept(java.io.InputStream in)
           
 ProxettaCreator accept(java.lang.String targetName)
           
protected  void destinationReady()
          Invoked after destination class is ready for manipulation.
 java.lang.String getProxyClassName()
          Returns proxy class name.
 boolean isProxyApplied()
          Returns true if at least one method was wrapped.
 void setVariableClassName(boolean varname)
          If true class name will vary for each creation.
 byte[] toByteArray()
          Returns raw bytecode.
 void visit(int version, int access, java.lang.String name, java.lang.String signature, java.lang.String supername, java.lang.String[] interfaces)
          Creates destination subclass for current target class.
 org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String signature, boolean b)
          Copies all destination type annotations to the target.
 void visitEnd()
          Finalize destination proxy class.
 org.objectweb.asm.MethodVisitor visitMethod(int access, java.lang.String name, java.lang.String desc, java.lang.String signature, java.lang.String[] exceptions)
          Creates methods and constructors.
 
Methods inherited from class jodd.proxetta.asm.EmptyVisitor
visitAnnotationDefault, visitAttribute, visitCode, visitField, visitFieldInsn, visitFrame, visitIincInsn, visitInnerClass, visitInsn, visitIntInsn, visitJumpInsn, visitLabel, visitLdcInsn, visitLineNumber, visitLocalVariable, visitLookupSwitchInsn, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitOuterClass, visitParameterAnnotation, visitSource, visitTableSwitchInsn, visitTryCatchBlock, visitTypeInsn, visitVarInsn
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dest

protected final org.objectweb.asm.ClassVisitor dest

proxyAspects

protected jodd.proxetta.asm.ProxyAspectData[] proxyAspects

targetClassname

protected java.lang.String targetClassname

nextSupername

protected java.lang.String nextSupername

targetPackage

protected java.lang.String targetPackage

thisReference

protected java.lang.String thisReference

superReference

protected java.lang.String superReference

proxyApplied

protected boolean proxyApplied

cw

protected org.objectweb.asm.ClassWriter cw

aspects

protected final ProxyAspect[] aspects

topMethodSignatures

protected final java.util.Set<java.lang.String> topMethodSignatures

variableClassName

protected boolean variableClassName

suffix

protected static int suffix

dd

protected jodd.proxetta.asm.DestinationData dd
Constructor Detail

ProxettaCreator

public ProxettaCreator(ProxyAspect... aspects)
Method Detail

accept

public ProxettaCreator accept(java.io.InputStream in)

accept

public ProxettaCreator accept(java.lang.String targetName)

accept

public ProxettaCreator accept(java.lang.Class target)

toByteArray

public byte[] toByteArray()
Returns raw bytecode.


isProxyApplied

public boolean isProxyApplied()
Returns true if at least one method was wrapped.


getProxyClassName

public java.lang.String getProxyClassName()
Returns proxy class name.


setVariableClassName

public void setVariableClassName(boolean varname)
If true class name will vary for each creation. This prevents java.lang.LinkageError: duplicate class definition.


destinationReady

protected void destinationReady()
Invoked after destination class is ready for manipulation.


visit

public void visit(int version,
                  int access,
                  java.lang.String name,
                  java.lang.String signature,
                  java.lang.String supername,
                  java.lang.String[] interfaces)
Creates destination subclass for current target class. Upon creation, destinationReady() is invoked.

Specified by:
visit in interface org.objectweb.asm.ClassVisitor
Overrides:
visit in class EmptyVisitor

visitMethod

public org.objectweb.asm.MethodVisitor visitMethod(int access,
                                                   java.lang.String name,
                                                   java.lang.String desc,
                                                   java.lang.String signature,
                                                   java.lang.String[] exceptions)
Creates methods and constructors.

Destination proxy will have all constructors as a target class, using ProxettaCreator.ConstructorBuilder.

For a method, ProxettaCreator.MethodBuilder first determines if method matches pointcut. If so, method will be proxified.

Specified by:
visitMethod in interface org.objectweb.asm.ClassVisitor
Overrides:
visitMethod in class EmptyVisitor

visitAnnotation

public org.objectweb.asm.AnnotationVisitor visitAnnotation(java.lang.String signature,
                                                           boolean b)
Copies all destination type annotations to the target.

Specified by:
visitAnnotation in interface org.objectweb.asm.ClassVisitor
Specified by:
visitAnnotation in interface org.objectweb.asm.FieldVisitor
Specified by:
visitAnnotation in interface org.objectweb.asm.MethodVisitor
Overrides:
visitAnnotation in class EmptyVisitor

visitEnd

public void visitEnd()
Finalize destination proxy class.

Specified by:
visitEnd in interface org.objectweb.asm.ClassVisitor
Specified by:
visitEnd in interface org.objectweb.asm.FieldVisitor
Specified by:
visitEnd in interface org.objectweb.asm.MethodVisitor
Overrides:
visitEnd in class EmptyVisitor


Copyright ©2008 Jodd Team