%%% %% 3.3.3: Advice Declarations %% %% @author Martin Bravenboer <martin.bravenboer@gmail.com> %%% module languages/aspectj/aspect/AdviceDeclaration[Ctx] exports sorts AdviceDec AdviceMod context-free syntax AdviceMod* AdviceSpec Throws[[Ctx]]? ":" PointcutExpr MethodBody[[Ctx]] -> AdviceDec {cons("AdviceDec")} StrictFP[[Ctx]] -> AdviceMod Anno[[Ctx]] -> AdviceMod sorts AdviceSpec context-free syntax "before" "(" {FormalParam[[Ctx]] ","}* ")" -> AdviceSpec {cons("Before")} "after" "(" {FormalParam[[Ctx]] ","}* ")" ExitStatus? -> AdviceSpec {cons("After")} ResultType[[Ctx]] "around" "(" {FormalParam[[Ctx]] ","}* ")" -> AdviceSpec {cons("Around")} "returning" -> ExitStatus {cons("Returning")} "returning" "(" ")" -> ExitStatus {cons("Returning")} "returning" "(" FormalParam[[Ctx]] ")" -> ExitStatus {cons("Returning")} "throwing" -> ExitStatus {cons("Throwing")} "throwing" "(" ")" -> ExitStatus {cons("Throwing")} "throwing" "(" FormalParam[[Ctx]] ")" -> ExitStatus {cons("Throwing")}