org.aspectj.weaver
Class CrosscuttingMembers

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

public class CrosscuttingMembers
extends java.lang.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.


Constructor Summary
CrosscuttingMembers(ResolvedType inAspect, boolean shouldConcretizeIfNeeded)
           
 
Method Summary
 void addConcreteShadowMunger(ShadowMunger m)
           
 void addDeclare(Declare declare)
           
 void addDeclares(java.util.Collection<Declare> declares)
           
 void addLateTypeMunger(ConcreteTypeMunger m)
           
 void addLateTypeMungers(java.util.Collection<ConcreteTypeMunger> c)
           
 void addPrivilegedAccesses(java.util.Collection<ResolvedMember> accessedMembers)
           
 void addShadowMungers(java.util.Collection<ShadowMunger> c)
           
 void addTypeMunger(ConcreteTypeMunger m)
           
 void addTypeMungers(java.util.Collection<ConcreteTypeMunger> c)
           
 void clearCaches()
           
 void exposeType(UnresolvedType typeToExpose)
           
 void exposeTypes(java.util.List<UnresolvedType> typesToExpose)
           
 java.util.Map<java.lang.String,java.lang.Object> getCflowBelowFields()
           
 java.util.Collection<ShadowMunger> getCflowEntries()
           
 java.util.Map<java.lang.String,java.lang.Object> getCflowFields()
           
 java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnFields()
           
 java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnMethods()
          includes declare @method and @constructor
 java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnTypes()
           
 java.util.List<Declare> getDeclareDominates()
           
 java.util.Collection<DeclareParents> getDeclareParents()
           
 java.util.Collection<DeclareSoft> getDeclareSofts()
           
 java.util.Collection<DeclareTypeErrorOrWarning> getDeclareTypeErrorOrWarning()
           
 java.util.List<ConcreteTypeMunger> getLateTypeMungers()
           
 java.util.List<ShadowMunger> getShadowMungers()
           
 java.util.List<ConcreteTypeMunger> getTypeMungers()
           
 boolean replaceWith(CrosscuttingMembers other, boolean careAboutShadowMungers)
          Updates the records if something has changed.
 void setPerClause(PerClause perClause)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CrosscuttingMembers

public CrosscuttingMembers(ResolvedType inAspect,
                           boolean shouldConcretizeIfNeeded)
Method Detail

addConcreteShadowMunger

public void addConcreteShadowMunger(ShadowMunger m)

addShadowMungers

public void addShadowMungers(java.util.Collection<ShadowMunger> c)

addTypeMungers

public void addTypeMungers(java.util.Collection<ConcreteTypeMunger> c)

addTypeMunger

public void addTypeMunger(ConcreteTypeMunger m)

addLateTypeMungers

public void addLateTypeMungers(java.util.Collection<ConcreteTypeMunger> c)

addLateTypeMunger

public void addLateTypeMunger(ConcreteTypeMunger m)

addDeclares

public void addDeclares(java.util.Collection<Declare> declares)

addDeclare

public void addDeclare(Declare declare)

exposeTypes

public void exposeTypes(java.util.List<UnresolvedType> typesToExpose)

exposeType

public void exposeType(UnresolvedType typeToExpose)

addPrivilegedAccesses

public void addPrivilegedAccesses(java.util.Collection<ResolvedMember> accessedMembers)

getCflowEntries

public java.util.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 java.util.List<Declare> getDeclareDominates()

getDeclareParents

public java.util.Collection<DeclareParents> getDeclareParents()

getDeclareSofts

public java.util.Collection<DeclareSoft> getDeclareSofts()

getShadowMungers

public java.util.List<ShadowMunger> getShadowMungers()

getTypeMungers

public java.util.List<ConcreteTypeMunger> getTypeMungers()

getLateTypeMungers

public java.util.List<ConcreteTypeMunger> getLateTypeMungers()

getDeclareAnnotationOnTypes

public java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnTypes()

getDeclareAnnotationOnFields

public java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnFields()

getDeclareAnnotationOnMethods

public java.util.Collection<DeclareAnnotation> getDeclareAnnotationOnMethods()
includes declare @method and @constructor


getDeclareTypeErrorOrWarning

public java.util.Collection<DeclareTypeErrorOrWarning> getDeclareTypeErrorOrWarning()

getCflowBelowFields

public java.util.Map<java.lang.String,java.lang.Object> getCflowBelowFields()

getCflowFields

public java.util.Map<java.lang.String,java.lang.Object> getCflowFields()

clearCaches

public void clearCaches()