@Override
 public synchronized int registerTextEditorHighlightingPass(
     @NotNull TextEditorHighlightingPassFactory factory,
     @Nullable int[] runAfterCompletionOf,
     @Nullable int[] runAfterOfStartingOf,
     boolean runIntentionsPassAfter,
     int forcedPassId) {
   assert !checkedForCycles;
   PassConfig info =
       new PassConfig(
           factory,
           runAfterCompletionOf == null || runAfterCompletionOf.length == 0
               ? ArrayUtil.EMPTY_INT_ARRAY
               : runAfterCompletionOf,
           runAfterOfStartingOf == null || runAfterOfStartingOf.length == 0
               ? ArrayUtil.EMPTY_INT_ARRAY
               : runAfterOfStartingOf);
   int passId = forcedPassId == -1 ? nextAvailableId++ : forcedPassId;
   PassConfig registered = myRegisteredPassFactories.get(passId);
   assert registered == null
       : "Pass id " + passId + " has already been registered in: " + registered.passFactory;
   myRegisteredPassFactories.put(passId, info);
   if (factory instanceof DirtyScopeTrackingHighlightingPassFactory) {
     myDirtyScopeTrackingFactories.add((DirtyScopeTrackingHighlightingPassFactory) factory);
   }
   return passId;
 }