org.aspectj.weaver.tools
Class WeavingAdaptor

java.lang.Object
  extended by org.aspectj.weaver.tools.WeavingAdaptor
All Implemented Interfaces:
IMessageContext
Direct Known Subclasses:
ClassLoaderWeavingAdaptor

public class WeavingAdaptor
extends java.lang.Object
implements IMessageContext

This adaptor allows the AspectJ compiler to be embedded in an existing system to facilitate load-time weaving. It provides an interface for a weaving class loader to provide a classpath to be woven by a set of aspects. A callback is supplied to allow a class loader to define classes generated by the compiler during the weaving process.

A weaving class loader should create a WeavingAdaptor before any classes are defined, typically during construction. The set of aspects passed to the adaptor is fixed for the lifetime of the adaptor although the classpath can be augmented. A system property can be set to allow verbose weaving messages to be written to the console.


Nested Class Summary
protected  class WeavingAdaptor.WeavingAdaptorMessageHolder
          Processes messages arising from weaver operations.
protected  class WeavingAdaptor.WeavingAdaptorMessageWriter
           
 
Field Summary
protected  java.security.ProtectionDomain activeProtectionDomain
           
protected  BcelWorld bcelWorld
           
protected  WeavedClassCache cache
           
 BcelObjectType delegateForCurrentClass
           
protected  java.util.Map<java.lang.String,IUnwovenClassFile> generatedClasses
           
protected  GeneratedClassHandler generatedClassHandler
           
static java.lang.String SHOW_WEAVE_INFO_PROPERTY
           
static java.lang.String TRACE_MESSAGES_PROPERTY
           
protected  boolean verbose
           
protected  BcelWeaver weaver
           
static java.lang.String WEAVING_ADAPTOR_VERBOSE
          System property used to turn on verbose weaving messages
 
Constructor Summary
protected WeavingAdaptor()
           
  WeavingAdaptor(GeneratedClassHandler handler, java.net.URL[] classURLs, java.net.URL[] aspectURLs)
          Construct a WeavingAdaptor with a reference to a GeneratedClassHandler, a full search path for resolving classes and a complete set of aspects.
  WeavingAdaptor(WeavingClassLoader loader)
          Construct a WeavingAdaptor with a reference to a weaving class loader.
 
Method Summary
protected  boolean accept(java.lang.String name, byte[] bytes)
           
 void addURL(java.net.URL url)
          Appends URL to path used by the WeavingAdptor to resolve classes
protected  void createMessageHandler()
           
protected  boolean debug(java.lang.String message)
           
protected  void disable()
           
protected  void dump(java.lang.String name, byte[] b, boolean before)
          Dump the given bytcode in _dump/...
protected  void enable()
           
protected  void ensureDelegateInitialized(java.lang.String name, byte[] bytes)
           
protected  boolean error(java.lang.String message)
           
protected  boolean error(java.lang.String message, java.lang.Throwable th)
           
 java.lang.String getContextId()
           
protected  java.lang.String getDumpDir()
           
protected  java.util.List<java.lang.String> getFullClassPath(java.lang.ClassLoader loader)
           
protected  IMessageHandler getMessageHandler()
           
 IMessageHolder getMessageHolder()
           
protected  boolean info(java.lang.String message)
           
protected  void initializeCache(java.lang.ClassLoader loader, java.util.List<java.lang.String> aspects, GeneratedClassHandler existingClassHandler, IMessageHandler myMessageHandler)
          If the cache is enabled, initialize it and swap out the existing classhandler for the caching one -
protected  boolean isEnabled()
           
 void setActiveProtectionDomain(java.security.ProtectionDomain protectionDomain)
           
protected  void setMessageHandler(IMessageHandler mh)
           
protected  boolean shouldDump(java.lang.String name, boolean before)
           
protected  boolean warn(java.lang.String message)
           
protected  boolean warn(java.lang.String message, java.lang.Throwable th)
           
 byte[] weaveClass(java.lang.String name, byte[] bytes)
          Weave a class using aspects previously supplied to the adaptor.
 byte[] weaveClass(java.lang.String name, byte[] bytes, boolean mustWeave)
          Weave a class using aspects previously supplied to the adaptor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WEAVING_ADAPTOR_VERBOSE

public static final java.lang.String WEAVING_ADAPTOR_VERBOSE
System property used to turn on verbose weaving messages

See Also:
Constant Field Values

SHOW_WEAVE_INFO_PROPERTY

public static final java.lang.String SHOW_WEAVE_INFO_PROPERTY
See Also:
Constant Field Values

TRACE_MESSAGES_PROPERTY

public static final java.lang.String TRACE_MESSAGES_PROPERTY
See Also:
Constant Field Values

verbose

protected boolean verbose

bcelWorld

protected BcelWorld bcelWorld

weaver

protected BcelWeaver weaver

generatedClassHandler

protected GeneratedClassHandler generatedClassHandler

generatedClasses

protected java.util.Map<java.lang.String,IUnwovenClassFile> generatedClasses

delegateForCurrentClass

public BcelObjectType delegateForCurrentClass

activeProtectionDomain

protected java.security.ProtectionDomain activeProtectionDomain

cache

protected WeavedClassCache cache
Constructor Detail

WeavingAdaptor

protected WeavingAdaptor()

WeavingAdaptor

public WeavingAdaptor(WeavingClassLoader loader)
Construct a WeavingAdaptor with a reference to a weaving class loader. The adaptor will automatically search the class loader hierarchy to resolve classes. The adaptor will also search the hierarchy for WeavingClassLoader instances to determine the set of aspects to be used for weaving.

Parameters:
loader - instance of ClassLoader

WeavingAdaptor

public WeavingAdaptor(GeneratedClassHandler handler,
                      java.net.URL[] classURLs,
                      java.net.URL[] aspectURLs)
Construct a WeavingAdaptor with a reference to a GeneratedClassHandler, a full search path for resolving classes and a complete set of aspects. The search path must include classes loaded by the class loader constructing the WeavingAdaptor and all its parents in the hierarchy.

Parameters:
handler - GeneratedClassHandler
classURLs - the URLs from which to resolve classes
aspectURLs - the aspects used to weave classes defined by this class loader
Method Detail

getFullClassPath

protected java.util.List<java.lang.String> getFullClassPath(java.lang.ClassLoader loader)

initializeCache

protected void initializeCache(java.lang.ClassLoader loader,
                               java.util.List<java.lang.String> aspects,
                               GeneratedClassHandler existingClassHandler,
                               IMessageHandler myMessageHandler)
If the cache is enabled, initialize it and swap out the existing classhandler for the caching one -

Parameters:
loader - classloader for this adapter, may be null
aspects - List of strings representing aspects managed by the adapter; these could be urls or classnames
existingClassHandler - current class handler
myMessageHandler - current message handler

createMessageHandler

protected void createMessageHandler()

getMessageHandler

protected IMessageHandler getMessageHandler()

getMessageHolder

public IMessageHolder getMessageHolder()

setMessageHandler

protected void setMessageHandler(IMessageHandler mh)

disable

protected void disable()

enable

protected void enable()

isEnabled

protected boolean isEnabled()

addURL

public void addURL(java.net.URL url)
Appends URL to path used by the WeavingAdptor to resolve classes

Parameters:
url - to be appended to search path

weaveClass

public byte[] weaveClass(java.lang.String name,
                         byte[] bytes)
                  throws java.io.IOException
Weave a class using aspects previously supplied to the adaptor.

Parameters:
name - the name of the class
bytes - the class bytes
Returns:
the woven bytes
Throws:
java.io.IOException - weave failed

weaveClass

public byte[] weaveClass(java.lang.String name,
                         byte[] bytes,
                         boolean mustWeave)
                  throws java.io.IOException
Weave a class using aspects previously supplied to the adaptor.

Parameters:
name - the name of the class
bytes - the class bytes
mustWeave - if true then this class *must* get woven (used for concrete aspects generated from XML)
Returns:
the woven bytes
Throws:
java.io.IOException - weave failed

accept

protected boolean accept(java.lang.String name,
                         byte[] bytes)

shouldDump

protected boolean shouldDump(java.lang.String name,
                             boolean before)

ensureDelegateInitialized

protected void ensureDelegateInitialized(java.lang.String name,
                                         byte[] bytes)

debug

protected boolean debug(java.lang.String message)

info

protected boolean info(java.lang.String message)

warn

protected boolean warn(java.lang.String message)

warn

protected boolean warn(java.lang.String message,
                       java.lang.Throwable th)

error

protected boolean error(java.lang.String message)

error

protected boolean error(java.lang.String message,
                        java.lang.Throwable th)

getContextId

public java.lang.String getContextId()
Specified by:
getContextId in interface IMessageContext

dump

protected void dump(java.lang.String name,
                    byte[] b,
                    boolean before)
Dump the given bytcode in _dump/... (dev mode)

Parameters:
name -
b -
before - whether we are dumping before weaving
Throws:
java.lang.Throwable

getDumpDir

protected java.lang.String getDumpDir()
Returns:
the directory in which to dump - default is _ajdump but it

setActiveProtectionDomain

public void setActiveProtectionDomain(java.security.ProtectionDomain protectionDomain)