private void processIssues(Component component) {
   DiskCache<DefaultIssue>.DiskAppender cacheAppender = issueCache.newAppender();
   try {
     Tracking<DefaultIssue, DefaultIssue> tracking = tracker.track(component);
     issueVisitors.beforeComponent(component);
     fillNewOpenIssues(component, tracking, cacheAppender);
     fillExistingOpenIssues(component, tracking, cacheAppender);
     closeUnmatchedBaseIssues(component, tracking, cacheAppender);
     issueVisitors.afterComponent(component);
   } catch (Exception e) {
     throw new IllegalStateException(
         String.format("Fail to process issues of component '%s'", component.getKey()), e);
   } finally {
     cacheAppender.close();
   }
 }
 private void process(
     Component component, DefaultIssue issue, DiskCache<DefaultIssue>.DiskAppender cacheAppender) {
   issueLifecycle.doAutomaticTransition(issue);
   issueVisitors.onIssue(component, issue);
   cacheAppender.append(issue);
   componentIssues.add(issue);
 }