public boolean predicate2(Object dm, Designer dsgr) {
   MClass cls, c;
   if (!(dm instanceof MClass)) return false;
   cls = (MClass) dm;
   if (!cls.isAbstract()) return false;  // original class was not abstract
   VectorSet derived = (new VectorSet(cls)).reachable(new ChildGenDerivedClasses());
   java.util.Enumeration enum = derived.elements();
   while (enum.hasMoreElements()) {
     c = (MClass) enum.nextElement();
     if (!c.isAbstract()) return false;  // found a concrete subclass
   }
   return true; // no concrete subclasses defined, this class is "useless"
 }