anchor.diff:  
   Thus, there was no need to define a new class to be used just once.
   
  -
   ==== Abstract class
   
  -Abstract classes represent generic concepts, thus, they cannot be instantiated, being created to be subclassed. Their members include fields/properties and abstract or concrete methods. Abstract methods do not have implementation, and must be implemented by concrete subclasses.
  +Abstract classes represent generic concepts, thus, they cannot be instantiated, being created to be subclassed.
  +Their members include fields/properties and abstract or concrete methods.
  +Abstract methods do not have implementation, and must be implemented by concrete subclasses.
   
   [source,groovy]
   ----
  
positive.code:  * They provide a good organization, by grouping classes that are used by only one class.
   * They lead to more maintainable codes, since inner classes are near the classes that use them.
  
  In several cases, inner classes are implementation of interfaces whose methods are needed by the outer class. The code below illustrates this with the usage of threads, which are very common.
  
  [source,groovy]
  ----
  include::../test/ClassTest.groovy[tags=inner_class2,indent=0]
  ----
  
  Note that the class `Inner2` is defined only to provide an implementation of the method `run` to class `Outer2`. Anonymous inner classes help to eliminate verbosity in this case.
  
  Since Groovy 3.0.0, Java syntax for non-static inner class instantiation is now supported, for example:
  
  [source,groovy]
  --------------------------------------
  
negative.code: annotation nodes that will be added to the node annotated with the meta-annotation. In this example, we return a
  single one corresponding to `@CompileStatic(TypeCheckingMode.SKIP)`.
  
  [[generics]]
  === Generics
  
  