[
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
|
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