/** interface fed to Comparator to sort classes and interfaces both top level
and nested.  Nested classes never become top level or vice versa as a result
of the sorting.  The semantics must stay the same after ordering.  The
ordering defined by the Comparator just gives hints on order where is
possible to swap classes around without changing the semantics.  We do not
touch anonymous classes.  They can never be moved, other than as part of a
method body or case clause. */

interface ClassItem {

/**
  * get Javadoc comment in front of declaration, null if none
  */
String getComment();

 /** true if has @FunctionalInterace lamba expression interface **/
boolean isFunctional();

/**
  * scope of this class
  * Returns enums for private protected package public
  */
Scope getScope();

/**
  * returns true for static, false for instance
  */
boolean isStatic();

/**
  * true if final
  */
boolean isFinal();

/**
  * true if interface, false if class (any type)
  */
boolean isInterface();

/** true if this class is nested inside some other class. nested instance = inner class */
boolean isNested();

/**
  * get the generic type for the class/interface, null if none.
  */
String getGeneric();

/**
  * return name of class/interface
  */
String getName();

}