code: private <I> void hear( Class<? super I> type, TypeEncounter<I> encounter )
      {
          if ( type == null || type.getPackage().getName().startsWith( JAVA_PACKAGE ) )
          {
              return;
          }
  
          for ( Method method : type.getDeclaredMethods() )
          {
              if ( method.isAnnotationPresent( annotationType ) )
              {
                  if ( method.getParameterTypes().length != 0 )
                  {
                      encounter.addError( "Annotated methods with @%s must not accept any argument, found %s",
                                          annotationType.getName(), method );
                  }
  
                  hear( method, encounter );
              }
          }
  
          hear( type.getSuperclass(), encounter );
      }
docs: Allows traverse the input type hierarchy.
  
  @param type encountered by Guice.
  @param encounter the injection context.