|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectabc.weaving.aspectinfo.Syntax
abc.weaving.aspectinfo.Pointcut
public abstract class Pointcut
This is the base class for pointcut designators; it is constructed by the frontend. A pointcut designator is primarily responsible for calculating the residue for itself at a given join point shadow.
Nested Class Summary | |
---|---|
protected static class |
Pointcut.DNF
This class is used to calculate the disjunctive normal form of pointcuts. |
Constructor Summary | |
---|---|
Pointcut(Position pos)
|
Method Summary | |
---|---|
protected Pointcut.DNF |
dnf()
Return the DNF form of this pointcut. |
static java.lang.String |
freshVar()
Return a freshly named pointcut variable |
abstract void |
getFreeVars(java.util.Set result)
Get a list of free variables bound by this pointcut |
protected abstract Pointcut |
inline(java.util.Hashtable renameEnv,
java.util.Hashtable typeEnv,
Aspect context,
int cflowdepth)
Inlining should remove all PointcutRefs, and return a pointcut that is alpha-renamed |
abstract Residue |
matchesAt(WeavingEnv env,
SootClass cls,
SootMethod method,
ShadowMatch sm)
Given a context and weaving environment, produce a residue |
static Pointcut |
normalize(Pointcut pc,
java.util.List formals,
Aspect context)
Return a "normalized" version of this pointcut. |
protected abstract void |
registerSetupAdvice(Aspect context,
java.util.Hashtable typeEnv)
If any synthetic advice is required to implement this pointcut, this method should take care of adding it. |
abstract java.lang.String |
toString()
Subclasses must define toString, for debugging purposes |
boolean |
unify(Pointcut otherpc,
Unification unification)
Attempt to unify two pointcuts. pc.unify(pc', unification) should return true if the pointcuts can be unified, and set the renamings appropriately in unification. |
Methods inherited from class abc.weaving.aspectinfo.Syntax |
---|
getPosition |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public Pointcut(Position pos)
The
- source position of the pointcutMethod Detail |
---|
public abstract java.lang.String toString()
toString
in class java.lang.Object
public abstract Residue matchesAt(WeavingEnv env, SootClass cls, SootMethod method, ShadowMatch sm) throws SemanticException
SemanticException
public static Pointcut normalize(Pointcut pc, java.util.List formals, Aspect context)
cflow
s/cflowbelow
s have
been "registered" as separate pointcuts
pc
- The pointcut to normalizeformals
- A list of Formal
s that are in scope for this
pointcutcontext
- The aspect in which the pointcut occurs
protected Pointcut.DNF dnf()
protected abstract Pointcut inline(java.util.Hashtable renameEnv, java.util.Hashtable typeEnv, Aspect context, int cflowdepth)
renameEnv
- A mapping from pointcut names to the Var
s
they should be renamed to. If a name isn't in the
map, it doesn't need to be renamed.typeEnv
- A mapping from pointcut names to AbcType
s.
Every variable that can appear free in the pointcut
must be listed. The names are those before any
renaming takes place.context
- The Aspect
in which the root pointcut is
defined. This is required because references to
abstract pointcuts must be resolved to the concrete
pointcut using this aspect.cflowdepth
- The number of surrounding cflow
s.
This is required
to determine the correct precedence for the
synthetic advice used to implement
cflow
.
public static java.lang.String freshVar()
protected abstract void registerSetupAdvice(Aspect context, java.util.Hashtable typeEnv)
context
- The aspect in which the pointcut is definedtypeEnv
- A mapping from formal name to AbcType
for
all the formal parameters to the pointcutpublic abstract void getFreeVars(java.util.Set result)
result
- The results should be placed in this set
(having it as a parameter allows it to be built up
incrementally, which is more efficient than
repeatedly taking the union of sets)public boolean unify(Pointcut otherpc, Unification unification)
A default implementation is provided, but all subclasses should override this - otherwise cflow CSE will be disabled for cflow that use these pointcuts.
Typical implementations for pointcuts that introduce no free variables are straightforward (see the And pointcut, for example). For pointcuts that introduce free variables, the Var.unify method is used to actually update the renamings (see the Args pointcut).
otherpc
- the pointcut that should be unify with thisunification
- the Unification that should be set.
AndPointcut.unify example
,
Var.unify
,
Unification
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |