Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] How to reuse the AspectJ pattern matching language

Hi Andy,

Thanks for the clarification. I'll take a look and get it back to you If I still have issues or questions.

All the best,
Henrique

On Wed, Oct 8, 2014 at 4:36 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
It is a bit more advanced than simple pattern matching, but it is reusable with certain constraints. The matching is separate to the weaving, captured in the org.aspectj.matcher.jar that we ship. It does rely on a 'world' (based on a class path) in order to resolve type references because we support patterns that need to know about type relationships.  Here is an example test case we have (from https://github.com/eclipse/org.aspectj/blob/93c58e39cf0512d0920c37a40026a6aa5f1ff26b/org.aspectj.matcher/testsrc/org/aspectj/matcher/tools/CommonPointcutExpressionTests.java ):

public void testMethodExecutionMatching02() {

checkAlwaysMatches("execution(* *val*(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkAlwaysMatches("execution(String *(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkAlwaysMatches("execution(* *(boolean))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkAlwaysMatches("execution(* j*..*.valueOf(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkAlwaysMatches("execution(* *(*))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");


checkNeverMatches("execution(* vulueOf(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkNeverMatches("execution(int *(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkNeverMatches("execution(* valueOf(String))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

checkNeverMatches("execution(private * valueOf(..))", "java.lang.String", "valueOf", "(Z)Ljava/lang/String;");

}


The method 'checkAlwaysMatches' constructs a pointcut _expression_ from the first string:


StandardPointcutExpression ex = pointcutParser.parsePointcutExpression(pointcutExpression);


Then uses the world to retrieve the specified member (e.g. "String valueOf(boolean)" from the String class, in the case of the first test entry there:


ResolvedType resolvedType = world.resolve(type);

ResolvedMember method = getMethod(resolvedType, methodName, methodSignature);


Then compares the two:


boolean b = ex.matchesMethodExecution(method).alwaysMatches();


Using it without a world of types, I'm not sure about that.


cheers,

Andy




On 7 October 2014 13:22, Henrique Rebêlo <hemr@xxxxxxxxxxx> wrote:
Hi Andy and all,

I was wondering if there is a way to reuse/use explicitly the ajc code responsible for pattern matching. That is, given a method signature pattern (using wildcarding etc) in some format (like String etc) and a method signature (also in some format), I want to know if that method signature pattern matches such method signature.

For example:

Given a signature pattern like "void C.set(..)" and a method signature like "void C.set(int, int)" I want to return "true" for this query.

Does AspectJ use Regular expressions or something like to perform such pattern matching? I just want to reuse such feature...

All the best,
Henrique

 

--
...............................................................................................................................
Henrique Rebelo
http://www.cin.ufpe.br/~hemr
Informatics Center, UFPE, Brazil

_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users


_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users



--
...............................................................................................................................
Henrique Rebelo
http://www.cin.ufpe.br/~hemr
Informatics Center, UFPE, Brazil

Back to the top