code: public Resources analyze(Set<Path> projectClassPaths, Set<Path> projectSourcePaths, Set<String> ignoredResources) {
          lock.lock();
          try {
              projectClassPaths.forEach(this::addProjectPath);
  
              // analyze relevant classes
              final JobRegistry jobRegistry = JobRegistry.getInstance();
              final Set<ClassResult> classResults = new HashSet<>();
  
              classes.stream()
                      .filter(this::isJAXRSRootResource)
                      .filter(r -> !ignoredResources.contains(r))
                      .forEach(c -> jobRegistry.analyzeResourceClass(c, new ClassResult()));
  
              Pair<String, ClassResult> classResultPair;
              while ((classResultPair = jobRegistry.nextUnhandledClass()) != null) {
                  final ClassResult classResult = classResultPair.getRight();
  
                  classResults.add(classResult);
                  analyzeClass(classResultPair.getLeft(), classResult);
  
                  bytecodeAnalyzer.analyzeBytecode(classResult);
              }
  
              javaDocAnalyzer.analyze(projectSourcePaths, classResults);
  
              return resultInterpreter.interpret(classResults);
          } finally {
              lock.unlock();
          }
      }
docs: Analyzes all classes in the given project path.
  
  @param projectClassPaths  The project class paths
  @param projectSourcePaths The project source file paths
  @param ignoredResources   The fully-qualified root resource class names to be ignored
  @return The REST resource representations