[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Strange thing when using a library of abstract aspects
|
Paulo,
The problem lies with the "exceptionClassesCorrectNames()"
pointcut. What actually have is "within(pt.zenida.paulo.jar.test.*Exception)"
because type names are fully qualified. If you move the aspect or the target
class into a different package the pointcut won't match,
Matthew Webster
AOSD Project
Java Technology Centre, MP146
IBM Hursley Park, Winchester, SO21 2JN, England
Telephone: +44 196 2816139 (external) 246139 (internal)
Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
http://w3.hursley.ibm.com/~websterm/
Please respond to aspectj-users@xxxxxxxxxxx
Sent by:
aspectj-users-bounces@xxxxxxxxxxx
To:
aspectj-users@xxxxxxxxxxx
cc:
Subject:
Re: [aspectj-users]
Strange thing when using a library of abstract aspects
Hello again,
Once my previous e-mail is very long and also complicated, I will try to
make
it simpler. So, here's the situation:
The ProjectToGenerateJar is the one that generates the JAR file to be used
in
other projects and it simply has an aspect, such as the one:
// if the package is pt.zenida.paulo.test, then it will work!!!
package pt.zenida.paulo.jar.test;
public abstract aspect EnforceExceptionClassesNamingConventionAspect {
public pointcut exceptionClassesCorrectNames() :
within(*Exception);
public final pointcut invalidNamesForExceptionClasses() :
staticinitialization(Exception+)
&&
!exceptionClassesCorrectNames();
declare error :
invalidNamesForExceptionClasses()
:
"Exception classes should be suffixed with Exception.";
}
In the ProjectToUseGeneratedJar, I have two classes extending Exception:
MyException and MyExceptionWithWrongName, and the following Aspect:
// This does not work
package pt.zenida.paulo.test;
import pt.zenida.paulo.jar.test.EnforceExceptionClassesNamingConventionAspect;
public aspect ConcreteEnforceExceptionClassesNamingConventionAspect extends
EnforceExceptionClassesNamingConventionAspect
{
}
// But this works, if I had created the abstract Aspect in a package called
"pt.zenida.paulo.test"
package pt.zenida.paulo.test;
public aspect ConcreteEnforceExceptionClassesNamingConventionAspect extends
EnforceExceptionClassesNamingConventionAspect
{
}
Is this a bug or am I missing something?
Cheers,
Paulo Zenida
Em Segunda, 13 de Março de 2006 21:48, o Paulo Alexandre Corigo Zenida
escreveu:
> Hello,
>
> I have a problem with using a library of abstract aspects in a project.
> I would like to understand if this is a bug, because I'm not seeing
any
> other reason.
>
> Let us suppose we have a project called ProjectA with the following
> structure:
>
> ProjectA
> src
> pt.zenida.paulo.common.pointcuts
> CommonPointcuts:
>
> public aspect CommonPointcuts {
>
> public
final pointcut all() :
!none();
>
> public
final pointcut none();
> }
>
>
> pt.zenida.paulo.projecta
> BaseAspect:
>
> import pt.zenida.paulo.common.pointcuts.*;
>
> public abstract aspect BaseAspect {
>
> public
pointcut scope() :
!within(BaseAspect+);
>
> public
pointcut enableAdvice() :
!within(BaseAspect+);
>
> public
pointcut excludedPoints() :
>
CommonPointcuts.none();
>
> public
pointcut declareWarningScope() :
CommonPointcuts.all();
>
> public
final pointcut declareErrorScope() :
!declareWarningScope();
>
> public
pointcut declareSofteningExceptionScope() :
>
CommonPointcuts.all();
>
> public
final pointcut scopeWithExcludedPoints() :
>
scope() &&
>
!excludedPoints();
> }
>
> EnforceExceptionClassesNamingConventionAspect:
>
> public abstract aspect EnforceExceptionClassesNamingConventionAspect
> extends BaseAspect {
>
> public
pointcut exceptionClassesCorrectNames() :
>
within(*Exception);
>
> public
final pointcut invalidNamesForExceptionClasses() :
>
staticinitialization(Exception+) &&
>
!exceptionClassesCorrectNames();
>
> declare
warning :
declareWarningScope() &&
>
invalidNamesForExceptionClasses() &&
>
scopeWithExcludedPoints() &&
>
enableAdvice() :
>
"Exception
classes should be suffixed with Exception.";
>
> declare
error :
declareErrorScope() &&
>
invalidNamesForExceptionClasses() &&
>
scopeWithExcludedPoints() &&
>
enableAdvice() :
>
"Exception
classes should be suffixed with Exception.";
> }
>
> ConcreteEnforceExceptionClassesNamingConventionAspect:
>
> public aspect ConcreteEnforceExceptionClassesNamingConventionAspect
extends
>
EnforceExceptionClassesNamingConventionAspect {
>
> public
pointcut scope() :
within(A) ||
>
within(pt.zenida.paulo.thesis.test.convention.naming..*);
> }
>
> pt.zenida.paulo.projecta.test
> MyException (listing 5)
>
> public class MyException extends Exception {
>
> }
>
> MyExceptionWithWrongName (listing 6)
>
> public class MyExceptionWithWrongName extends Exception {
>
> }
>
> The previous works just fine, with the compiler displaying a warning
> message for the second class but not for the first one. However, if
I
> use two projects, creating a jar file with the Abstract aspect which
is
> included in the classpath of the second project, such as the following,
> it issues a warning for both classes:
>
> ProjectA
> src
> pt.zenida.paulo.common.pointcuts
> CommonPointcuts:
> (remains unchanged)
> pt.zenida.paulo.projecta
> BaseAspect:
> (remains unchanged)
> EnforceExceptionClassesNamingConventionAspect:
> (remains unchanged)
>
> ProjectB
> src
> pt.zenida.paulo.projectb
> ConcreteEnforceExceptionClassesNamingConventionAspect:
>
> import
> pt.zenida.paulo.projecta.EnforceExceptionClassesNamingConventionAspect;
>
> public aspect ConcreteEnforceExceptionClassesNamingConventionAspect
extends
>
EnforceExceptionClassesNamingConventionAspect {
>
> public
pointcut scope() :
within(pt.zenida.paulo.projectb.test.*);
> }
>
> pt.zenida.paulo.projectb.test
> MyException:
> (remains unchanged)
> MyExceptionWithWrongName:
> (remains unchanged)
> lib
> projectA.jar
>
> Any ideas about what this might be? Am I missing something?
>
> Thanks in advance.
>
> Paulo Zenida
>
> ----------------------------------------------------------------
> Mensagem enviada usando o IMP (Internet Messaging Program).
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users