void (@NotNull Project project, @NotNull Document doc, @NotNull PsiFile scope) { LOG.assertTrue(!project.isDisposed()); Pair<DocumentChangeTransaction, Integer> pair = myTransactionsMap.get(doc); Pair<DocumentChangeTransaction, Integer> prev = pair; if (pair == null) { PsiFile psiFile = scope.getContainingFile(); pair = new Pair<>(new DocumentChangeTransaction(doc, psiFile), 0); if (scope.isPhysical()) { myBus.syncPublisher(PsiDocumentTransactionListener.TOPIC).transactionStarted(doc, psiFile); } } else { pair = new Pair<>(pair.getFirst(), pair.getSecond().intValue() + 1); } LOG.assertTrue(myTransactionsMap.put(doc, pair) == prev); }