%%% %% Pointcut Expressions %% %% @author Martin Bravenboer <martin.bravenboer@gmail.com> %%% module languages/aspectj/pointcut/Expression[Ctx JavaCtx] imports languages/aspectj/common/BooleanComposition[PointcutExpr] exports sorts PointcutExpr PrimPointcutName context-free syntax "call" "(" MethodConstrPattern ")" -> PointcutExpr {cons("Call")} "execution" "(" MethodConstrPattern ")" -> PointcutExpr {cons("Exec")} lexical syntax "call" | "execution" -> PrimPointcutName context-free syntax "initialization" "(" ConstrPattern ")" -> PointcutExpr {cons("InitExec")} "preinitialization" "(" ConstrPattern ")" -> PointcutExpr {cons("PreInitExec")} "staticinitialization" "(" TopTypePattern ")" -> PointcutExpr {cons("StaticInitExec")} lexical syntax "initialization" | "preinitialization" | "staticinitialization" -> PrimPointcutName context-free syntax "get" "(" FieldPattern ")" -> PointcutExpr {cons("GetField")} "set" "(" FieldPattern ")" -> PointcutExpr {cons("SetField")} lexical syntax "get" | "set" -> PrimPointcutName context-free syntax "handler" "(" TopTypePattern ")" -> PointcutExpr {cons("Handler")} lexical syntax "handler" -> PrimPointcutName context-free syntax "adviceexecution" "(" ")" -> PointcutExpr {cons("AdviceExec")} lexical syntax "adviceexecution" -> PrimPointcutName context-free syntax "within" "(" TopTypePattern ")" -> PointcutExpr {cons("Within")} "withincode" "(" MethodConstrPattern ")" -> PointcutExpr {cons("WithinCode")} lexical syntax "within" | "withincode" -> PrimPointcutName context-free syntax "cflow" "(" PointcutExpr ")" -> PointcutExpr {cons("CFlow")} "cflowbelow" "(" PointcutExpr ")" -> PointcutExpr {cons("CFlowBelow")} lexical syntax "cflow" | "cflowbelow" -> PrimPointcutName context-free syntax "if" "(" Expr[[JavaCtx]] ")" -> PointcutExpr {cons("If")} lexical syntax "if" -> PrimPointcutName context-free syntax "this" "(" TypeOrIdPattern ")" -> PointcutExpr {cons("This")} "target" "(" TypeOrIdPattern ")" -> PointcutExpr {cons("Target")} "args" "(" {TypeOrIdPattern ","}* ")" -> PointcutExpr {cons("Args")} lexical syntax "this" | "target" | "args" -> PrimPointcutName context-free syntax "@this" "(" AnnoOrId ")" -> PointcutExpr {cons("AtThis")} "@target" "(" AnnoOrId ")" -> PointcutExpr {cons("AtTarget")} "@within" "(" AnnoOrId ")" -> PointcutExpr {cons("AtWithin")} "@withincode" "(" AnnoOrId ")" -> PointcutExpr {cons("AtWithinCode")} "@annotation" "(" AnnoOrId ")" -> PointcutExpr {cons("AtAnno")} "@args" "(" {AnnoOrIdPattern ","}* ")" -> PointcutExpr {cons("AtArgs")} context-free syntax PointcutName "(" {TypeOrIdPattern ","}* ")" -> PointcutExpr {cons("NamedPointcut")} sorts PointcutName context-free syntax Id[[Ctx]] -> PointcutName {cons("PointcutName")} ClassOrInterfaceType[[Ctx]] "." Id[[Ctx]] -> PointcutName {cons("PointcutName")} sorts AnnoOrId AnnoOrIdPattern TypeOrIdPattern context-free syntax TypeName[[Ctx]] -> AnnoOrId "*" -> AnnoOrIdPattern {cons("Wildcard")} ".." -> AnnoOrIdPattern {cons("DotWildcard")} AnnoOrId -> AnnoOrIdPattern "*" -> TypeOrIdPattern {cons("Wildcard")} ".." -> TypeOrIdPattern {cons("DotWildcard")} Type[[Ctx]] -> TypeOrIdPattern Type[[Ctx]] "+" -> TypeOrIdPattern {cons("Subtype")} lexical restrictions "adviceexecution" "args" "call" "cflow" "cflowbelow" "error" "execution" "get" "handler" "initialization" "parents" "precedence" "preinitialization" "returning" "set" "soft" "staticinitialization" "target" "throwing" "warning" "within" "withincode" -/- [A-Za-z0-9\_\$]