code: public TasksParserResult invoke(final File workspace, final VirtualChannel channel) throws IOException, InterruptedException {
          String[] files = findFiles(workspace);
  
          TaskScanner taskScanner = new TaskScanner(high, normal, low, ignoreCase);
          TasksParserResult result = new TasksParserResult(files.length);
          ModuleDetector moduleDetector = createModuleDetector(workspace);
          log("Found " + files.length + " files to scan for tasks");
          for (String fileName : files) {
              try {
                  File originalFile = new File(workspace, fileName);
                  Collection<Task> tasks = taskScanner.scan(readFile(originalFile));
                  if (!tasks.isEmpty()) {
                      String absolutePath = originalFile.getAbsolutePath();
                      String packageName = PackageDetectors.detectPackageName(absolutePath);
                      String guessedModule = moduleDetector.guessModuleName(absolutePath);
                      String actualModule = StringUtils.defaultIfEmpty(moduleName, guessedModule);
  
                      for (Task task : tasks) {
                          task.setFileName(absolutePath);
                          task.setPackageName(packageName);
                          task.setModuleName(actualModule);
                          task.setPathName(workspace.getPath());
  
                          ContextHashCode hashCode = new ContextHashCode();
                          task.setContextHashCode(hashCode.create(absolutePath, task.getPrimaryLineNumber(), defaultEncoding));
                      }
  
                      result.addAnnotations(tasks);
                  }
              }
              catch (IOException exception) {
                  // ignore files that could not be read
              }
              if (Thread.interrupted()) {
                  throw new InterruptedException("Canceling scanning since build has been aborted.");
              }
          }
          result.addModule(moduleName);
  
          if (stringLogger != null) {
              result.setLog(stringLogger.toString());
          }
  
          return result;
      }
docs: {@inheritDoc}