%%% %% Aspect Declaration %% %% @author Martin Bravenboer <martin.bravenboer@gmail.com> %%% module languages/aspectj/aspect/Declaration[Ctx JavaCtx] imports languages/aspectj/aspect/BodyDeclaration[Ctx] exports sorts AspectDec context-free syntax AspectDecHead AspectBody -> AspectDec {cons("AspectDec")} (Anno[[Ctx]] | AspectMod)* "aspect" Id[[Ctx]] TypeParams[[Ctx]]? Super[[Ctx]]? Interfaces[[Ctx]]? PerClause? -> AspectDecHead {cons("AspectDecHead")} sorts PerClause context-free syntax "pertarget" "(" PointcutExpr ")" -> PerClause {cons("PerTarget")} "perthis" "(" PointcutExpr ")" -> PerClause {cons("PerThis")} "percflow" "(" PointcutExpr ")" -> PerClause {cons("PerCFlow")} "percflowbelow" "(" PointcutExpr ")" -> PerClause {cons("PerCFlowBelow")} "pertypewithin" "(" TypePattern ")" -> PerClause {cons("PerTypeWithin")} "issingleton" -> PerClause {cons("IsSingleton")} "issingleton" "(" ")" -> PerClause {cons("IsSingleton")} sorts AspectBody context-free syntax "{" AspectBodyDec* "}" -> AspectBody {cons("AspectBody")} %% todo: which modifiers are allowed? sorts AspectMod context-free syntax ClassMod[[JavaCtx]] -> AspectMod "privileged" -> AspectMod {cons("Privileged")}