Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Aspect Oriented Programming (AOP): Using AspectJ to implement and enforce coding standards

Nice topic.  I'm curious what Ron Bodkin thinks about it,
since he's also interested in enforcing coding standards.

Here's some feedback based on a brief review of the article
but not looking at the sample code download.  Some code comments
and then general ones:

- Declaring an error on the following pointcut misses the 
  case where a field in one class is set by another class,
  or where one field is written from another setter;
  it also requires constructors to use setters, even
  though some setters are written to assume the object
  has been initialized.

    pointcut directMemberAssignment():
      set(* *.*) && !withincode(* set*(..));

- The following pointcut is pretty expensive at compile time,
  and applies to system library calls which might be defined
  to return null at various points:

    //The first primitive pointcut matches all calls,
    //The second avoids those that have a void return type.
    pointcut methodsThatReturnObjects():
          call(* *.*(..)) && !call(void *.*(..))

- fyi, I don't understand your logging aspect.  For example,
  I'm not sure what you intended, but you have  
  one logger, not multiple (per-class) loggers, here:

    //Static introduction!
    private static Logger ILoggable.fLogger;

  (same comment for your method declaration)

  I'm not sure why there is a logger instance in the (singleton?)
  aspect which tracks the handlers, either.  Not thread-safe?

  For per-class logging under AspectJ 1.0, one solution is
  presented in the old user mailing list archives (I think with
  a title like "accessing static members for Log4J").  Perhaps
  your solution works in 1.1; as I said, I didn't try the code,
  so forgive any misperceptions.

Your distinction between runtime and compile-time aspects
might be unclear.  It might help to explain that declare error/
warning works only at compile-time, and only with staticly-
determinable pointcuts.

Finally, a list of resources at the end might be helpful. Some
of the articles listed on the AspectJ PARC page are on point.


> "R. Dale Asberry" wrote:
> I started writing this article last October, but only recently completed
> it.  Please let me know what you think!
> Aspect Oriented Programming (AOP): Using AspectJ to implement and enforce
> coding standards

Back to the top