code: private void analyzeModels() {
          try {
              do {
                  ExecutorService pool = Executors.newFixedThreadPool(context.getSettings().getNbThread());
  
                  while (context.workToDo()) {
                      pool.execute(new ModelExecutor(context));
                  }
  
                  pool.shutdown();
                  while (!pool.isTerminated()) {
                      pool.awaitTermination(TIMEOUT, TimeUnit.MILLISECONDS);
                  }
  
              } while (context.workToDo());
          } catch (InterruptedException e) {
              throw new RuntimeException("Interrupted " + e.getMessage());
          }
      }
docs: Fill ClassModel type and content parts by java introspection of classes