From 1971b706683427606eac866097c1684692650ecf Mon Sep 17 00:00:00 2001
From: Mirco Dotta <mirco.dotta@gmail.com>
Date: Mon, 6 Jul 2009 15:03:04 +0000
Subject: [PATCH] Updated strategy for collecting annotated @generator class
 and methods. Refer to the funcheck wiki for an exhaustive explanation of
 this.

---
 .../scalacheck/FilterGeneratorAnnotations.scala  | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/funcheck/scalacheck/FilterGeneratorAnnotations.scala b/src/funcheck/scalacheck/FilterGeneratorAnnotations.scala
index 65498dee1..be3aaae44 100644
--- a/src/funcheck/scalacheck/FilterGeneratorAnnotations.scala
+++ b/src/funcheck/scalacheck/FilterGeneratorAnnotations.scala
@@ -37,7 +37,9 @@ trait FilterGeneratorAnnotations {
   def filterTreesWithGeneratorAnnotation(Unit: CompilationUnit)(tree: Tree): Boolean = {
     lazy val sym = tree.symbol
     tree match {
-      case cd: ClassDef => sym.hasAttribute(generator) || abstractSuperClassHasGeneratorAnnotation(sym.superClass)
+      case cd: ClassDef => isAbstractClass(sym) || 
+        				   sym.hasAttribute(generator) || 
+                           abstractSuperClassHasGeneratorAnnotation(sym.superClass)
       case d: DefDef    => sym.hasAttribute(generator)
       case _ => false
     }
@@ -51,13 +53,17 @@ trait FilterGeneratorAnnotations {
     superclass match {
       case NoSymbol => false
       case cs: ClassSymbol =>
-        (cs.hasFlag(scala.tools.nsc.symtab.Flags.ABSTRACT) &&  
-           cs.hasAttribute(generator)) || 
+        (isAbstractClass(cs) && cs.hasAttribute(generator)) || 
           abstractSuperClassHasGeneratorAnnotation(cs.superClass)
       case _ => 
         assert(false, "expected ClassSymbol, found "+superclass)
         false
     }
-    
   }
-}
+  
+  private def isAbstractClass(s: Symbol): Boolean = s match {
+    case cs: ClassSymbol => cs.hasFlag(scala.tools.nsc.symtab.Flags.ABSTRACT) 
+    case _ => false
+  } 
+
+}
\ No newline at end of file
-- 
GitLab