Useless error reporting while weaving with aj1.6 aspects compiled in 1.5

View: New views
2 Messages — Rating Filter:   Alert me  

Parent Message unknown Useless error reporting while weaving with aj1.6 aspects compiled in 1.5

by Jacques Morel-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I am somewhat new to aspectj but I have an observation on how poor
error reporting is sometimes.
First, I would like to say that in my experience when it comes to
failures, knowing the context of the failure is everything. Without
context you cannot efficiently troubleshoot a problem and can waste a
lot of time and energy. Good exception handling and reporting is an
attribute of good frameworks.

Here is my current example:
I am working on IDEA with the aspectj weaver plugin that allows to
weave aspects incrementally as code is modified (not as good as
eclipse but better than ant :-) )
The plugin is directly calling aspectj api classes mainly through
BcelWeaver. It uses aspectj 1.6.5.
By default the plugin is taking the entire project classpath to find
aspects. Unbeknownst to me it took an old version of aspectlib.jar
1.5.3 included as part of testing tool not even used in the production
system.
Unfortunately it picked the compiled aspects that are included with
it. While pre-processing all application compiled classes and aspects
it choked on these old aspects and threw a BCException. Here is what I
had to work with to troubleshoot the problem:

2009-09-22 17:23:29,695 [ 153761]  ERROR -
llij.aop.aspectj.AspectJWeaver - malformed org.aspectj.weaver.Declare
attribute (length:80)org.aspectj.weaver.BCException: unknown
TypePattern kind: 0


org.aspectj.weaver.BCException: malformed org.aspectj.weaver.Declare
attribute (length:80)org.aspectj.weaver.BCException: unknown
TypePattern kind: 0


       at org.aspectj.weaver.AjAttribute.read(AjAttribute.java:131)
       at org.aspectj.weaver.bcel.Utility.readAjAttributes(Utility.java:98)
       at org.aspectj.weaver.bcel.BcelObjectType.ensureAspectJAttributesUnpacked(BcelObjectType.java:355)
       at org.aspectj.weaver.bcel.BcelObjectType.<init>(BcelObjectType.java:146)
       at org.aspectj.weaver.bcel.BcelWorld.buildBcelDelegate(BcelWorld.java:371)
       at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:366)
       at org.aspectj.weaver.World.resolveToReferenceType(World.java:384)
       at org.aspectj.weaver.World.resolve(World.java:278)
       at org.aspectj.weaver.World.resolve(World.java:192)
       at org.aspectj.weaver.bcel.BcelObjectType.getSuperclass(BcelObjectType.java:210)
       at org.aspectj.weaver.ReferenceType.getSuperclass(ReferenceType.java:821)
       at org.aspectj.weaver.ResolvedType.getDirectSupertypes(ResolvedType.java:67)
       at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:520)
       at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363)
       at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceDescendantsOf(CrosscuttingMembersSet.java:107)
       at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:93)
       at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:59)
       at org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave(BcelWeaver.java:517)
       at se.expertsystem.intellij.aop.aspectj.AspectJWeaver.internalWeave(AspectJWeaver.java:198)

There is no mention of what class is the culprit. This is as helpful
as our old and beloved NPE :-P
I had to get the source of the plugin, install it with a version of
IDEA devkit, debug my real project and stop the debugger on that
exception in order to get the name of that class! Not really user
friendly and obviously beyond the standard programmer's time and
skills.
Therefore I would strongly suggest that you insert at key places
catches that wrap the exception with useful contextual info and
rethrow it.
I would also try to make it so that tools like this plugin may devise
compensating mechanism. If aspectj would give a semantically rich
exception like InvalidAspectException with the fq name of the class in
question and where it came from (what jar...), the plugin could try to
work around the problem by proposing to remove the offending aspect.

Let me know if you want me to open a ticket for this but I could not
do more than this specific case.

Jacques
_______________________________________________
aspectj-users mailing list
aspectj-users@...
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Re: Useless error reporting while weaving with aj1.6 aspects compiled in 1.5

by Andy Clement :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Jacques,

please open a bug, I agree the error was poor.

cheers,
Andy

2009/9/23 Jacques Morel <bibou644-aspectj@...>:

> I am somewhat new to aspectj but I have an observation on how poor
> error reporting is sometimes.
> First, I would like to say that in my experience when it comes to
> failures, knowing the context of the failure is everything. Without
> context you cannot efficiently troubleshoot a problem and can waste a
> lot of time and energy. Good exception handling and reporting is an
> attribute of good frameworks.
>
> Here is my current example:
> I am working on IDEA with the aspectj weaver plugin that allows to
> weave aspects incrementally as code is modified (not as good as
> eclipse but better than ant :-) )
> The plugin is directly calling aspectj api classes mainly through
> BcelWeaver. It uses aspectj 1.6.5.
> By default the plugin is taking the entire project classpath to find
> aspects. Unbeknownst to me it took an old version of aspectlib.jar
> 1.5.3 included as part of testing tool not even used in the production
> system.
> Unfortunately it picked the compiled aspects that are included with
> it. While pre-processing all application compiled classes and aspects
> it choked on these old aspects and threw a BCException. Here is what I
> had to work with to troubleshoot the problem:
>
> 2009-09-22 17:23:29,695 [ 153761]  ERROR -
> llij.aop.aspectj.AspectJWeaver - malformed org.aspectj.weaver.Declare
> attribute (length:80)org.aspectj.weaver.BCException: unknown
> TypePattern kind: 0
>
>
> org.aspectj.weaver.BCException: malformed org.aspectj.weaver.Declare
> attribute (length:80)org.aspectj.weaver.BCException: unknown
> TypePattern kind: 0
>
>
>        at org.aspectj.weaver.AjAttribute.read(AjAttribute.java:131)
>        at org.aspectj.weaver.bcel.Utility.readAjAttributes(Utility.java:98)
>        at org.aspectj.weaver.bcel.BcelObjectType.ensureAspectJAttributesUnpacked(BcelObjectType.java:355)
>        at org.aspectj.weaver.bcel.BcelObjectType.<init>(BcelObjectType.java:146)
>        at org.aspectj.weaver.bcel.BcelWorld.buildBcelDelegate(BcelWorld.java:371)
>        at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:366)
>        at org.aspectj.weaver.World.resolveToReferenceType(World.java:384)
>        at org.aspectj.weaver.World.resolve(World.java:278)
>        at org.aspectj.weaver.World.resolve(World.java:192)
>        at org.aspectj.weaver.bcel.BcelObjectType.getSuperclass(BcelObjectType.java:210)
>        at org.aspectj.weaver.ReferenceType.getSuperclass(ReferenceType.java:821)
>        at org.aspectj.weaver.ResolvedType.getDirectSupertypes(ResolvedType.java:67)
>        at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:520)
>        at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:363)
>        at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceDescendantsOf(CrosscuttingMembersSet.java:107)
>        at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:93)
>        at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:59)
>        at org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave(BcelWeaver.java:517)
>        at se.expertsystem.intellij.aop.aspectj.AspectJWeaver.internalWeave(AspectJWeaver.java:198)
>
> There is no mention of what class is the culprit. This is as helpful
> as our old and beloved NPE :-P
> I had to get the source of the plugin, install it with a version of
> IDEA devkit, debug my real project and stop the debugger on that
> exception in order to get the name of that class! Not really user
> friendly and obviously beyond the standard programmer's time and
> skills.
> Therefore I would strongly suggest that you insert at key places
> catches that wrap the exception with useful contextual info and
> rethrow it.
> I would also try to make it so that tools like this plugin may devise
> compensating mechanism. If aspectj would give a semantically rich
> exception like InvalidAspectException with the fq name of the class in
> question and where it came from (what jar...), the plugin could try to
> work around the problem by proposing to remove the offending aspect.
>
> Let me know if you want me to open a ticket for this but I could not
> do more than this specific case.
>
> Jacques
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@...
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
aspectj-users@...
https://dev.eclipse.org/mailman/listinfo/aspectj-users