/**
  * Filters the classes to be transformed.
  *
  * @param definition the definition
  * @param classMetaData the meta-data for the class
  * @param cg the class to filter
  * @return boolean true if the method should be filtered away
  */
 private boolean classFilter(
     final AspectWerkzDefinition definition,
     final ClassMetaData classMetaData,
     final ClassGen cg) {
   if (cg.isInterface()
       || TransformationUtil.hasSuperClass(
           classMetaData, "org.codehaus.aspectwerkz.attribdef.aspect.Aspect")
       || TransformationUtil.hasSuperClass(
           classMetaData, "org.codehaus.aspectwerkz.xmldef.advice.AroundAdvice")
       || TransformationUtil.hasSuperClass(
           classMetaData, "org.codehaus.aspectwerkz.xmldef.advice.PreAdvice")
       || TransformationUtil.hasSuperClass(
           classMetaData, "org.codehaus.aspectwerkz.xmldef.advice.PostAdvice")) {
     return true;
   }
   String className = cg.getClassName();
   if (definition.inExcludePackage(className)) {
     return true;
   }
   if (!definition.inIncludePackage(className)) {
     return true;
   }
   if (definition.hasExecutionPointcut(classMetaData)
       || definition.hasThrowsPointcut(classMetaData)) {
     return false;
   }
   return true;
 }