Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] On Returning as static cross cutting concern primitive to enforce coding standards

Hello,

    I am implementing a static cross cutting concern that enforces coding standards on a project that I am working on. These standards extend beyond those available via FindBugs and fb-contrib, are really only good to have and not bugs. I could write a FindBugs extension detector, but that just seems too much effort for me.

   One of the standards that I would like to enforce is the Null Object pattern for return type, rather than returning null. In effect I would like to do something as follows

   declare warning : <pointcut definition to capture null return values> : "Coding standards enforced on project require use of Null Object";

or being more specific

   declare warning : on returning null  : "Coding standards enforced on project require use of Null Object";

or being more generic

   declare warning : on returning typepattern : "Some message"

(typepattern allows null)

I can think of at least one other use case, where it would be a warning to return a type rather than return the interface type.

declare warning : on returning ArrayList : "Use the List interface type";

  Is there any way to accomplish this right now using the existing pointcut definition language?

I realize that I could accomplish something similar using around/after advice and return a Null Object when the return value is null, but that seems too cumber some to me at this time. I would have to find out the return type of the method and return a Null Object which would be assignable to the type, i.e. an around/after advice definition for each return type where I would like to enforce Null Object.

Extracting an interface and defining my advice against a pointcut capturing the interface in return types is an option too, but new types could not be checked for without a change in the aspect, I guess dynamic proxies are an alternative here, but then I'd rather do the findbugs detector.

I very well might be "special" in this instance and trying to do something extremely dumb or something never intended to be done using aspectj, in which case I can write the findbugs detector

Thanks
Bhaskar

Back to the top