aboutsummaryrefslogtreecommitdiffstats
path: root/docs/progguide/quickreference.adoc
diff options
context:
space:
mode:
authorAlexander Kriegisch <Alexander@Kriegisch.name>2022-01-08 11:50:55 +0700
committerAlexander Kriegisch <Alexander@Kriegisch.name>2024-01-06 10:09:11 +0100
commitd4a6906b3012fac6e4dbaca5854fc59ba0d67e47 (patch)
treec78540555837c12cfaef7f9cc95842668a3ee7f9 /docs/progguide/quickreference.adoc
parent9735e858af48ff0bce152ea489800a86a151b08d (diff)
downloadaspectj-d4a6906b3012fac6e4dbaca5854fc59ba0d67e47.tar.gz
aspectj-d4a6906b3012fac6e4dbaca5854fc59ba0d67e47.zip
Rename '*GuideDB' directories to their actual HTML site target names
Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
Diffstat (limited to 'docs/progguide/quickreference.adoc')
-rw-r--r--docs/progguide/quickreference.adoc200
1 files changed, 200 insertions, 0 deletions
diff --git a/docs/progguide/quickreference.adoc b/docs/progguide/quickreference.adoc
new file mode 100644
index 000000000..3920b5ef2
--- /dev/null
+++ b/docs/progguide/quickreference.adoc
@@ -0,0 +1,200 @@
+[[quick]]
+== AspectJ Quick Reference
+
+[[quick-pointcuts]]
+=== Pointcuts
+
+[cols=",",]
+|===
+|*Methods and Constructors* |
+
+|`call(Signature)` |every call to any method or constructor matching
+`Signature` at the call site
+
+|`execution(Signature)` |every execution of any method or constructor
+matching `Signature`
+
+|*Fields* |
+
+|`get(Signature)` |every reference to any field matching `Signature`
+
+|`set(Signature)` |every assignment to any field matching `Signature`.
+The assigned value can be exposed with an `args` pointcut
+
+|*Exception Handlers* |
+
+|`handler(TypePattern)` |every exception handler for any `Throwable`
+type in `TypePattern`. The exception value can be exposed with an `args`
+pointcut
+
+|*Advice* |
+
+|`adviceexecution()` |every execution of any piece of advice
+
+|*Initialization* |
+
+|`staticinitialization(TypePattern)` |every execution of a static
+initializer for any type in `TypePattern`
+
+|`initialization(Signature)` |every initialization of an object when the
+first constructor called in the type matches `Signature`, encompassing
+the return from the super constructor call to the return of the
+first-called constructor
+
+|`preinitialization(Signature)` |every pre-initialization of an object
+when the first constructor called in the type matches `Signature`,
+encompassing the entry of the first-called constructor to the call to
+the super constructor
+
+|*Lexical* |
+
+|`within(TypePattern)` |every join point from code defined in a type in
+`TypePattern`
+
+|`withincode(Signature)` |every join point from code defined in a method
+or constructor matching `Signature`
+|===
+
+[[quick-typePatterns]]
+=== Type Patterns
+
+A type pattern is one of
+
+[cols=",",]
+|===
+|*Type pattern* |
+
+|`TypeNamePattern` |all types in `TypeNamePattern`
+
+|`SubtypePattern` |all types in `SubtypePattern`, a pattern with a `+`
+
+|`ArrayTypePattern` |all types in `ArrayTypePattern`, a pattern with one or more ``[]``s.
+
+|`!TypePattern` |all types not in `TypePattern`
+
+|`TypePattern0 && TypePattern1` |all types in both `TypePattern0` and `TypePattern1`
+
+|`TypePattern0 \|\| TypePattern1` |all types in either `TypePattern0` or `TypePattern1`
+
+|`( TypePattern )` |all types in `TypePattern`
+|===
+
+where `TypeNamePattern` can either be a plain type name, the wildcard
+`\*` (indicating all types), or an identifier with embedded `*` and `..`
+wildcards.
+
+An embedded `*` in an identifier matches any sequence of characters, but
+does not match the package (or inner-type) separator `.`.
+
+An embedded `..` in an identifier matches any sequence of characters
+that starts and ends with the package (or inner-type) separator `.`.
+
+[[quick-advice]]
+=== Advice
+
+Each piece of advice is of the form
+
+[source, text]
+....
+[ strictfp ] AdviceSpec [ throws TypeList ] : Pointcut { Body }
+....
+
+where `AdviceSpec` is one of
+
+`before( Formals )`::
+ runs before each join point
+`after( Formals ) returning [ ( Formal ) ]`::
+ runs after each join point that returns normally. The optional formal
+ gives access to the returned value
+`after( Formals ) throwing [ ( Formal ) ]`::
+ runs after each join point that throws a `Throwable`.
+ If the optional formal is present, runs only after each join point
+ that throws a `Throwable` of the type of `Formal`, and `Formal` gives access to the
+ `Throwable` exception value
+`after( Formals )`::
+ runs after each join point regardless of whether it returns normally
+ or throws a `Throwable`
+`Type around( Formals )`::
+ runs in place of each join point. The join point can be executed by
+ calling `proceed`, which takes the same number and types of arguments as the around
+ advice.
+
+Three special variables are available inside of advice bodies:
+
+`thisJoinPoint`::
+ an object of type `org.aspectj.lang.JoinPoint` representing the join point
+ at which the advice is executing
+`thisJoinPointStaticPart`::
+ equivalent to `thisJoinPoint.getStaticPart()`, but may use fewer runtime resources
+`thisEnclosingJoinPointStaticPart`::
+ the static part of the dynamically enclosing join point
+
+[[quick-interType]]
+=== Inter-type member declarations
+
+Each inter-type member is one of
+
+`Modifiers ReturnType OnType . Id ( Formals ) [ throws TypeList ] { Body }`::
+ a method on `OnType`
+`abstract Modifiers ReturnType OnType . Id ( Formals ) [ throws TypeList ] ;`::
+ an abstract method on `OnType`
+`Modifiers OnType . new ( Formals ) [ throws TypeList ] { Body }`::
+ a constructor on `OnType`
+`Modifiers Type OnType . Id [ = Expression ] ;`::
+ a field on `OnType`
+
+[[quick-other]]
+=== Other declarations
+
+`declare parents : TypePattern extends Type ;`::
+ the types in `TypePattern` extend `Type`
+`declare parents : TypePattern implements TypeList ;`::
+ the types in `TypePattern` implement the types in `TypeList`
+`declare warning : Pointcut : String ;`::
+ if any of the join points in `Pointcut` possibly exist in the program,
+ the compiler emits the warning `String`
+`declare error : Pointcut : String ;`::
+ if any of the join points in `Pointcut` could possibly exist in the program,
+ the compiler emits the error `String`
+`declare soft : Type : Pointcut ;`::
+ any `Type` exception that gets thrown at any join point picked out by `Pointcut`
+ is wrapped in `org.aspectj.lang.SoftException`
+`declare precedence : TypePatternList ;`::
+ at any join point where multiple pieces of advice apply, the advice
+ precedence at that join point is in `TypePatternList` order
+
+[[quick-aspectAssociations]]
+=== Aspects
+
+Each aspect is of the form
+
+[source, text]
+....
+[ privileged ] Modifiers aspect Id [ extends Type ] [ implements TypeList ] [ PerClause ] { Body }
+....
+
+where `PerClause` defines how the aspect is instantiated and associated
+(`issingleton()` by default):
+
+[cols=",,",options="header",]
+|===
+|PerClause |Description |Accessor
+|[ `issingleton()` ] |One instance of the aspect is made. This is the
+default. |`aspectOf()` at all join points
+
+|`perthis(Pointcut)` |An instance is associated with each object that is
+the currently executing object at any join point in `Pointcut`.
+|`aspectOf(Object)` at all join points
+
+|`pertarget(Pointcut)` |An instance is associated with each object that
+is the target object at any join point in `Pointcut`.
+|`aspectOf(Object)` at all join points
+
+|`percflow(Pointcut)` |The aspect is defined for each entrance to the
+control flow of the join points defined by `Pointcut`. |`aspectOf()` at
+join points in `cflow(Pointcut)`
+
+|`percflowbelow(Pointcut)` |The aspect is defined for each entrance to
+the control flow below the join points defined by `Pointcut`.
+|`aspectOf()` at join points in `cflowbelow(Pointcut)`
+|===