Package org.aspectj.weaver.tools
Class PointcutParser
java.lang.Object
org.aspectj.weaver.tools.PointcutParser
- Direct Known Subclasses:
InternalUseOnlyPointcutParser
A PointcutParser can be used to build PointcutExpressions for a user-defined subset of AspectJ's pointcut language
- Author:
- Adrian Colyer, Andy Clement
-
Constructor Summary
ModifierConstructorDescriptionprotected
Create a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions: Theif, cflow, and cflowbelow
pointcut designators are not supported Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts The pointcut expression must be anonymous with no formals allowed. -
Method Summary
Modifier and TypeMethodDescriptionprotected Pointcut
concretizePointcutExpression(Pointcut pc, Class<?> inScope, PointcutParameter[] formalParameters)
createPointcutParameter(String name, Class<?> type)
Create a pointcut parameter of the given name and type.static Set<PointcutPrimitive>
static PointcutParser
Returns a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions: Theif, cflow, and cflowbelow
pointcut designators are not supported Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts The pointcut expression must be anonymous with no formals allowed.static PointcutParser
getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(ClassLoader classLoader)
Returns a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions: Theif, cflow, and cflowbelow
pointcut designators are not supported Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts The pointcut expression must be anonymous with no formals allowed.static PointcutParser
getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(Set<PointcutPrimitive> supportedPointcutKinds)
Returns a pointcut parser that can parse pointcut expressions built from a user-defined subset of AspectJ's supported pointcut primitives.static PointcutParser
getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(Set<PointcutPrimitive> supportedPointcutKinds, ClassLoader classLoader)
Returns a pointcut parser that can parse pointcut expressions built from a user-defined subset of AspectJ's supported pointcut primitives.parsePointcutExpression(String expression)
Parse the given pointcut expression.parsePointcutExpression(String expression, Class<?> inScope, PointcutParameter[] formalParameters)
Parse the given pointcut expression.parseTypePattern(String typePattern)
Parse the given aspectj type pattern, and return a matcher that can be used to match types using it.void
registerPointcutDesignatorHandler(PointcutDesignatorHandler designatorHandler)
Register a new pointcut designator handler with this parser.protected Pointcut
resolvePointcutExpression(String expression, Class<?> inScope, PointcutParameter[] formalParameters)
protected void
setClassLoader(ClassLoader aLoader)
Set the classloader that this parser should use for type resolution.protected void
setClassLoader(ClassLoader aLoader, boolean shareWorlds)
Set the classloader that this parser should use for type resolution.void
setLintProperties(String resourcePath)
Set the lint properties for this parser from the given resource on the classpath.void
setLintProperties(Properties properties)
Set the lint properties for this parser from the given properties set.protected void
setWorld(ReflectionWorld aWorld)
-
Constructor Details
-
PointcutParser
protected PointcutParser()Create a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions:- The
if, cflow, and cflowbelow
pointcut designators are not supported - Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts
- The pointcut expression must be anonymous with no formals allowed.
- The
-
-
Method Details
-
getAllSupportedPointcutPrimitives
- Returns:
- a Set containing every PointcutPrimitive except if, cflow, and cflowbelow (useful for passing to PointcutParser constructor).
-
getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution
public static PointcutParser getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution()Returns a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions:- The
if, cflow, and cflowbelow
pointcut designators are not supported - Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts
- The pointcut expression must be anonymous with no formals allowed.
When resolving types in pointcut expressions, the context classloader is used to find types.
- The
-
getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution
public static PointcutParser getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(Set<PointcutPrimitive> supportedPointcutKinds)Returns a pointcut parser that can parse pointcut expressions built from a user-defined subset of AspectJ's supported pointcut primitives. The following restrictions apply:- The
if, cflow, and cflowbelow
pointcut designators are not supported - Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts
- The pointcut expression must be anonymous with no formals allowed.
When resolving types in pointcut expressions, the context classloader is used to find types.
- Parameters:
supportedPointcutKinds
- a set of PointcutPrimitives this parser should support- Throws:
UnsupportedOperationException
- if the set contains if, cflow, or cflow below
- The
-
getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution
public static PointcutParser getPointcutParserSupportingAllPrimitivesAndUsingSpecifiedClassloaderForResolution(ClassLoader classLoader)Returns a pointcut parser that can parse the full AspectJ pointcut language with the following exceptions:- The
if, cflow, and cflowbelow
pointcut designators are not supported - Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts
- The pointcut expression must be anonymous with no formals allowed.
When resolving types in pointcut expressions, the given classloader is used to find types.
- The
-
getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution
public static PointcutParser getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(Set<PointcutPrimitive> supportedPointcutKinds, ClassLoader classLoader)Returns a pointcut parser that can parse pointcut expressions built from a user-defined subset of AspectJ's supported pointcut primitives. The following restrictions apply:- The
if, cflow, and cflowbelow
pointcut designators are not supported - Pointcut expressions must be self-contained :- they cannot contain references to other named pointcuts
- The pointcut expression must be anonymous with no formals allowed.
When resolving types in pointcut expressions, the given classloader is used to find types.
- Parameters:
supportedPointcutKinds
- a set of PointcutPrimitives this parser should support- Throws:
UnsupportedOperationException
- if the set contains if, cflow, or cflow below
- The
-
setWorld
-
setClassLoader
Set the classloader that this parser should use for type resolution.- Parameters:
aLoader
-
-
setClassLoader
Set the classloader that this parser should use for type resolution.- Parameters:
aLoader
-shareWorlds
- if true then two PointcutParsers operating using the same classloader will share a ReflectionWorld
-
setLintProperties
Set the lint properties for this parser from the given resource on the classpath.- Parameters:
resourcePath
- path to a file containing aspectj lint properties- Throws:
IOException
-
setLintProperties
Set the lint properties for this parser from the given properties set.- Parameters:
properties
-
-
registerPointcutDesignatorHandler
Register a new pointcut designator handler with this parser. This provides an extension mechansim for the integration of domain-specific pointcut designators with the AspectJ pointcut language.- Parameters:
designatorHandler
-
-
createPointcutParameter
Create a pointcut parameter of the given name and type.- Parameters:
name
-type
-- Returns:
-
parsePointcutExpression
public PointcutExpression parsePointcutExpression(String expression) throws UnsupportedPointcutPrimitiveException, IllegalArgumentExceptionParse the given pointcut expression. A global scope is assumed for resolving any type references, and the pointcut must contain no formals (variables to be bound).- Throws:
UnsupportedPointcutPrimitiveException
- if the parser encounters a primitive pointcut expression of a kind not supported by this PointcutParser.IllegalArgumentException
- if the expression is not a well-formed pointcut expression
-
parsePointcutExpression
public PointcutExpression parsePointcutExpression(String expression, Class<?> inScope, PointcutParameter[] formalParameters) throws UnsupportedPointcutPrimitiveException, IllegalArgumentExceptionParse the given pointcut expression. The pointcut is resolved as if it had been declared inside the inScope class (this allows the pointcut to contain unqualified references to other pointcuts declared in the same type for example). The pointcut may contain zero or more formal parameters to be bound at matched join points.- Throws:
UnsupportedPointcutPrimitiveException
- if the parser encounters a primitive pointcut expression of a kind not supported by this PointcutParser.IllegalArgumentException
- if the expression is not a well-formed pointcut expression
-
resolvePointcutExpression
protected Pointcut resolvePointcutExpression(String expression, Class<?> inScope, PointcutParameter[] formalParameters) -
concretizePointcutExpression
protected Pointcut concretizePointcutExpression(Pointcut pc, Class<?> inScope, PointcutParameter[] formalParameters) -
parseTypePattern
Parse the given aspectj type pattern, and return a matcher that can be used to match types using it.- Parameters:
typePattern
- an aspectj type pattern- Returns:
- a type pattern matcher that matches using the given pattern
- Throws:
IllegalArgumentException
- if the type pattern cannot be successfully parsed.
-