下面列出了com.intellij.psi.PsiDocumentManager#doPostponedOperationsAndUnblockDocument ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void insert(List<String> items) {
PsiDocumentManager manager = PsiDocumentManager.getInstance(serviceKeyValue.getProject());
Document document = manager.getDocument(serviceKeyValue.getContainingFile());
if (document == null) {
return;
}
List<String> arrayList = new ArrayList<>();
for (String item : items) {
arrayList.add("'@" + (StringUtils.isNotBlank(item) ? item : "?") + "'");
}
YamlHelper.putKeyValue(serviceKeyValue, "arguments", "[" + StringUtils.join(arrayList, ", ") + "]");
manager.doPostponedOperationsAndUnblockDocument(document);
manager.commitDocument(document);
}
@RequiredReadAction
public static <T extends PsiElement> T forcePsiPostprocessAndRestoreElement(@Nonnull T element,
boolean useFileLanguage) {
final PsiFile psiFile = element.getContainingFile();
final Document document = psiFile.getViewProvider().getDocument();
//if (document == null) return element;
final Language language = useFileLanguage ? psiFile.getLanguage() : PsiUtilCore.getDialect(element);
final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(psiFile.getProject());
final RangeMarker rangeMarker = document.createRangeMarker(element.getTextRange());
documentManager.doPostponedOperationsAndUnblockDocument(document);
documentManager.commitDocument(document);
T elementInRange = findElementInRange(psiFile, rangeMarker.getStartOffset(), rangeMarker.getEndOffset(),
(Class<? extends T>)element.getClass(),
language, element);
rangeMarker.dispose();
return elementInRange;
}
public static void optimzeDeps(@NotNull PsiFile file) {
final PropertyVisitor visitor = new PropertyVisitor();
file.accept(new BuckVisitor() {
@Override
public void visitElement(PsiElement node) {
node.acceptChildren(this);
node.accept(visitor);
}
});
// Commit modifications
final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject());
manager.doPostponedOperationsAndUnblockDocument(manager.getDocument(file));
}
private void optimizeDeps(@NotNull PsiFile file) {
final PropertyVisitor visitor = new PropertyVisitor();
file.accept(
new BuckVisitor() {
@Override
public void visitElement(PsiElement node) {
node.acceptChildren(this);
node.accept(visitor);
}
});
// Commit modifications.
final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject());
manager.doPostponedOperationsAndUnblockDocument(manager.getDocument(file));
}
private static void reorderImports(final PsiFile file) {
HaxeFileModel fileModel = HaxeFileModel.fromElement(file);
List<HaxeImportStatement> allImports = fileModel.getImportStatements();
if (allImports.size() < 2) {
return;
}
final HaxeImportStatement firstImport = allImports.get(0);
int startOffset = firstImport.getStartOffsetInParent();
final HaxeImportStatement lastImport = allImports.get(allImports.size() - 1);
int endOffset = lastImport.getStartOffsetInParent() + lastImport.getText().length();
// We assume the common practice of placing all imports in a single "block" at the top of a file. If there is something else (comments,
// code, etc) there we just stop reordering to prevent data loss.
for (PsiElement child : file.getChildren()) {
int childOffset = child.getStartOffsetInParent();
if (childOffset >= startOffset && childOffset <= endOffset
&& !(child instanceof HaxeImportStatement)
&& !(child instanceof PsiWhiteSpace)) {
return;
}
}
List<String> sortedImports = new ArrayList<>();
for (HaxeImportStatement currentImport : allImports) {
sortedImports.add(currentImport.getText());
}
sortedImports.sort(String::compareToIgnoreCase);
final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(file.getProject());
final Document document = psiDocumentManager.getDocument(file);
if (document != null) {
final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(file.getProject());
/* This operation trims the document if necessary (e.g. it happens with "\n" at the very beginning).
Need to reevaluate offsets here.
*/
documentManager.doPostponedOperationsAndUnblockDocument(document);
// Reevaluating offset values according to the previous comment.
startOffset = firstImport.getStartOffsetInParent();
endOffset = lastImport.getStartOffsetInParent() + lastImport.getText().length();
document.deleteString(startOffset, endOffset);
StringBuilder sortedImportsText = new StringBuilder();
for (String sortedImport : sortedImports) {
sortedImportsText.append(sortedImport);
sortedImportsText.append("\n");
}
// Removes last "\n".
CharSequence sortedImportsTextTrimmed = sortedImportsText.subSequence(0, sortedImportsText.length() - 1);
documentManager.doPostponedOperationsAndUnblockDocument(document);
document.insertString(startOffset, sortedImportsTextTrimmed);
}
// TODO Reorder usings.
}