Class CrosscuttingMembers

java.lang.Object
org.aspectj.weaver.CrosscuttingMembers

public class CrosscuttingMembers extends Object
This holds on to all members that have an invasive effect outside of there own compilation unit. These members need to be all gathered up and in a world before any weaving can take place. They are also important in the compilation process and need to be gathered up before the inter-type declaration weaving stage (unsurprisingly). All members are concrete.
Author:
Jim Hugunin
  • Constructor Details

    • CrosscuttingMembers

      public CrosscuttingMembers(ResolvedType inAspect, boolean shouldConcretizeIfNeeded)
  • Method Details

    • addConcreteShadowMunger

      public void addConcreteShadowMunger(ShadowMunger m)
    • addShadowMungers

      public void addShadowMungers(Collection<ShadowMunger> c)
    • addTypeMungers

      public void addTypeMungers(Collection<ConcreteTypeMunger> c)
    • addTypeMunger

      public void addTypeMunger(ConcreteTypeMunger m)
    • addLateTypeMungers

      public void addLateTypeMungers(Collection<ConcreteTypeMunger> c)
    • addLateTypeMunger

      public void addLateTypeMunger(ConcreteTypeMunger m)
    • addDeclares

      public void addDeclares(Collection<Declare> declares)
    • addDeclare

      public void addDeclare(Declare declare)
    • exposeTypes

      public void exposeTypes(List<UnresolvedType> typesToExpose)
    • exposeType

      public void exposeType(UnresolvedType typeToExpose)
    • addPrivilegedAccesses

      public void addPrivilegedAccesses(Collection<ResolvedMember> accessedMembers)
    • getCflowEntries

      public Collection<ShadowMunger> getCflowEntries()
    • replaceWith

      public boolean replaceWith(CrosscuttingMembers other, boolean careAboutShadowMungers)
      Updates the records if something has changed. This is called at most twice, firstly whilst collecting ITDs and declares. At this point the CrosscuttingMembers we're comparing ourselves with doesn't know about shadowmungers. Therefore a straight comparison with the existing list of shadowmungers would return that something has changed even though it might not have, so in this first round we ignore the shadowMungers. The second time this is called is whilst we're preparing to weave. At this point we know everything in the system and so we're able to compare the shadowMunger list. (see bug 129163)
      Parameters:
      other -
      careAboutShadowMungers -
      Returns:
      true if something has changed since the last time this method was called, false otherwise
    • setPerClause

      public void setPerClause(PerClause perClause)
    • getDeclareDominates

      public List<Declare> getDeclareDominates()
    • getDeclareParents

      public Collection<DeclareParents> getDeclareParents()
    • getDeclareSofts

      public Collection<DeclareSoft> getDeclareSofts()
    • getShadowMungers

      public List<ShadowMunger> getShadowMungers()
    • getTypeMungers

      public List<ConcreteTypeMunger> getTypeMungers()
    • getLateTypeMungers

      public List<ConcreteTypeMunger> getLateTypeMungers()
    • getDeclareAnnotationOnTypes

      public Collection<DeclareAnnotation> getDeclareAnnotationOnTypes()
    • getDeclareAnnotationOnFields

      public Collection<DeclareAnnotation> getDeclareAnnotationOnFields()
    • getDeclareAnnotationOnMethods

      public Collection<DeclareAnnotation> getDeclareAnnotationOnMethods()
      includes declare @method and @constructor
    • getDeclareTypeErrorOrWarning

      public Collection<DeclareTypeErrorOrWarning> getDeclareTypeErrorOrWarning()
    • getCflowBelowFields

      public Map<String,​Object> getCflowBelowFields()
    • getCflowFields

      public Map<String,​Object> getCflowFields()
    • clearCaches

      public void clearCaches()