Class WeavingAdaptor

  • All Implemented Interfaces:
    org.aspectj.bridge.IMessageContext
    Direct Known Subclasses:
    ClassLoaderWeavingAdaptor

    public class WeavingAdaptor
    extends java.lang.Object
    implements org.aspectj.bridge.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.

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected WeavingAdaptor()  
        WeavingAdaptor​(org.aspectj.weaver.tools.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​(org.aspectj.weaver.tools.WeavingClassLoader loader)
      Construct a WeavingAdaptor with a reference to a weaving class loader.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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 org.aspectj.bridge.IMessageHandler getMessageHandler()  
      org.aspectj.bridge.IMessageHolder getMessageHolder()  
      protected boolean info​(java.lang.String message)  
      protected void initializeCache​(java.lang.ClassLoader loader, java.util.List<java.lang.String> aspects, org.aspectj.weaver.tools.GeneratedClassHandler existingClassHandler, org.aspectj.bridge.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​(org.aspectj.bridge.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 org.aspectj.weaver.bcel.BcelWorld bcelWorld
      • weaver

        protected org.aspectj.weaver.bcel.BcelWeaver weaver
      • generatedClassHandler

        protected org.aspectj.weaver.tools.GeneratedClassHandler generatedClassHandler
      • generatedClasses

        protected java.util.Map<java.lang.String,​org.aspectj.weaver.IUnwovenClassFile> generatedClasses
      • delegateForCurrentClass

        public org.aspectj.weaver.bcel.BcelObjectType delegateForCurrentClass
      • activeProtectionDomain

        protected java.security.ProtectionDomain activeProtectionDomain
      • cache

        protected org.aspectj.weaver.tools.cache.WeavedClassCache cache
    • Constructor Detail

      • WeavingAdaptor

        protected WeavingAdaptor()
      • WeavingAdaptor

        public WeavingAdaptor​(org.aspectj.weaver.tools.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​(org.aspectj.weaver.tools.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,
                                       org.aspectj.weaver.tools.GeneratedClassHandler existingClassHandler,
                                       org.aspectj.bridge.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 org.aspectj.bridge.IMessageHandler getMessageHandler()
      • getMessageHolder

        public org.aspectj.bridge.IMessageHolder getMessageHolder()
      • setMessageHandler

        protected void setMessageHandler​(org.aspectj.bridge.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 org.aspectj.bridge.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)