Java 类com.intellij.psi.impl.PsiToDocumentSynchronizer 实例源码
项目:intellij-ce-playground
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceAfterAdd() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.insertString(document, 1, "a");
buffer.insert(1, "a");
synchronizer.replaceString(document, 3, 4, "a");
buffer.replace(3, 4, "a");
synchronizer.replaceString(document, 3, 5, "bb");
buffer.replace(3, 5, "bb");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
assertSize(2, transaction.getAffectedFragments().keySet());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 3, 6);
}
项目:intellij-ce-playground
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceWithMultipleAdditions() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.replaceString(document, 0, 10, "0");
buffer.replace(0, 10, "0");
for (int i = 1; i < 10; i++) {
synchronizer.insertString(document, i, "" + i);
buffer.insert(i, "" + i);
}
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
assertSize(1, transaction.getAffectedFragments().keySet());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 5);
}
项目:intellij-ce-playground
文件:RangeMarkerTest.java
public void testPsi2DocMergeMultipleAdditionsWithReplace() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
assertNotNull(transaction);
for (int i = 0; i < 10; i++) {
synchronizer.insertString(document, i, "" + i);
buffer.insert(i, "" + i);
}
assertSize(1, transaction.getAffectedFragments().keySet());
synchronizer.replaceString(document, 0, 20, "0123456789");
buffer.replace(0, 20, "0123456789");
assertSize(1, transaction.getAffectedFragments().keySet());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 5);
}
项目:intellij-ce-playground
文件:RangeMarkerTest.java
public void testPsi2DocSurround() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.replaceString(document, 3, 5, "3a4");
buffer.replace(3, 5, "3a4");
synchronizer.insertString(document, 3, "b");
buffer.insert(3, "b");
synchronizer.insertString(document, 7, "d");
buffer.insert(7, "d");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
assertSize(3, transaction.getAffectedFragments().keySet());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 7);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testDocSynchronizerPrefersLineBoundaryChanges() throws Exception {
RangeMarker marker = createMarker("import java.awt.List;\n" +
"[import java.util.ArrayList;\n]" +
"import java.util.HashMap;\n" +
"import java.util.Map;");
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
Document document = marker.getDocument();
synchronizer.startTransaction(getProject(), document, null);
String newText = StringUtil.replaceSubstring(document.getText(), TextRange.create(marker), "");
synchronizer.replaceString(document, 0, document.getTextLength(), newText);
final List<DocumentEvent> events = new ArrayList<DocumentEvent>();
document.addDocumentListener(new DocumentAdapter() {
@Override
public void documentChanged(DocumentEvent e) {
events.add(e);
}
});
synchronizer.doCommitTransaction(document);
assertEquals(newText, document.getText());
DocumentEvent event = assertOneElement(events);
assertEquals("DocumentEventImpl[myOffset=22, myOldLength=28, myNewLength=0, myOldString='import java.util.ArrayList;\n', myNewString=''].", event.toString());
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocReplaceAfterAdd() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
synchronizer.insertString(marker.getDocument(), 1, "a");
buffer.insert(1, "a");
synchronizer.replaceString(marker.getDocument(), 3, 4, "a");
buffer.replace(3, 4, "a");
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 3, 6);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceAfterAdd() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
synchronizer.insertString(marker.getDocument(), 1, "a");
buffer.insert(1, "a");
synchronizer.replaceString(marker.getDocument(), 3, 4, "a");
buffer.replace(3, 4, "a");
synchronizer.replaceString(marker.getDocument(), 3, 5, "bb");
buffer.replace(3, 5, "bb");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(marker.getDocument());
final Set<Pair<PsiToDocumentSynchronizer.MutableTextRange, StringBuffer>> affectedFragments = transaction.getAffectedFragments();
assertEquals(affectedFragments.size(), 2);
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 3, 6);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceWithMultipleAdditions() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
synchronizer.replaceString(marker.getDocument(), 0, 10, "0");
buffer.replace(0, 10, "0");
for (int i = 1; i < 10; i++) {
synchronizer.insertString(marker.getDocument(), i, "" + i);
buffer.insert(i, "" + i);
}
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(marker.getDocument());
final Set<Pair<PsiToDocumentSynchronizer.MutableTextRange, StringBuffer>> affectedFragments = transaction.getAffectedFragments();
assertEquals(1, affectedFragments.size());
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 2, 5);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocMergeMultipleAdditionsWithReplace() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(marker.getDocument());
final Set<Pair<PsiToDocumentSynchronizer.MutableTextRange, StringBuffer>> affectedFragments = transaction.getAffectedFragments();
for (int i = 0; i < 10; i++) {
synchronizer.insertString(marker.getDocument(), i, "" + i);
buffer.insert(i, "" + i);
}
assertEquals(1, affectedFragments.size());
synchronizer.replaceString(marker.getDocument(), 0, 20, "0123456789");
buffer.replace(0, 20, "0123456789");
assertEquals(1, affectedFragments.size());
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 2, 5);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocSurround() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
synchronizer.replaceString(marker.getDocument(), 3, 5, "3a4");
buffer.replace(3, 5, "3a4");
synchronizer.insertString(marker.getDocument(), 3, "b");
buffer.insert(3, "b");
synchronizer.insertString(marker.getDocument(), 7, "d");
buffer.insert(7, "d");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(marker.getDocument());
final Set<Pair<PsiToDocumentSynchronizer.MutableTextRange, StringBuffer>> affectedFragments = transaction.getAffectedFragments();
assertEquals(3, affectedFragments.size());
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 2, 7);
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2DocForwardRangesChanges() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
Document document = marker.getDocument();
synchronizer.startTransaction(getProject(), document, null);
synchronizer.replaceString(document, 4, 5, "3a4");
buffer.replace(4, 5, "3a4");
synchronizer.insertString(document, 7, "b");
buffer.insert(7, "b");
synchronizer.insertString(document, 1, "b");
buffer.insert(1, "b");
synchronizer.doCommitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 3, 8);
}
项目:consulo
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceAfterAdd() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.insertString(document, 1, "a");
buffer.insert(1, "a");
synchronizer.replaceString(document, 3, 4, "a");
buffer.replace(3, 4, "a");
synchronizer.replaceString(document, 3, 5, "bb");
buffer.replace(3, 5, "bb");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
final Map<TextRange, CharSequence> affectedFragments = transaction.getAffectedFragments();
assertEquals(affectedFragments.size(), 2);
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 3, 6);
}
项目:consulo
文件:RangeMarkerTest.java
public void testPsi2DocMergeReplaceWithMultipleAdditions() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.replaceString(document, 0, 10, "0");
buffer.replace(0, 10, "0");
for (int i = 1; i < 10; i++) {
synchronizer.insertString(document, i, "" + i);
buffer.insert(i, "" + i);
}
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
final Map<TextRange, CharSequence> affectedFragments = transaction.getAffectedFragments();
assertEquals(1, affectedFragments.size());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 5);
}
项目:consulo
文件:RangeMarkerTest.java
public void testPsi2DocMergeMultipleAdditionsWithReplace() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
final Map<TextRange, CharSequence> affectedFragments = transaction.getAffectedFragments();
for (int i = 0; i < 10; i++) {
synchronizer.insertString(document, i, "" + i);
buffer.insert(i, "" + i);
}
assertEquals(1, affectedFragments.size());
synchronizer.replaceString(document, 0, 20, "0123456789");
buffer.replace(0, 20, "0123456789");
assertEquals(1, affectedFragments.size());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 5);
}
项目:consulo
文件:RangeMarkerTest.java
public void testPsi2DocSurround() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker(buffer.toString(), 2, 5);
synchronizer.startTransaction(getProject(), document, psiFile);
synchronizer.replaceString(document, 3, 5, "3a4");
buffer.replace(3, 5, "3a4");
synchronizer.insertString(document, 3, "b");
buffer.insert(3, "b");
synchronizer.insertString(document, 7, "d");
buffer.insert(7, "d");
final PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = synchronizer.getTransaction(document);
final Map<TextRange, CharSequence> affectedFragments = transaction.getAffectedFragments();
assertEquals(3, affectedFragments.size());
synchronizer.commitTransaction(document);
assertEquals(buffer.toString(), document.getText());
assertValidMarker(marker, 2, 7);
}
项目:intellij-ce-playground
文件:FormattingDocumentModelImpl.java
@Nullable
public static Document getDocumentToBeUsedFor(final PsiFile file) {
final Project project = file.getProject();
final Document document = PsiDocumentManager.getInstance(project).getDocument(file);
if (document == null) return null;
if (PsiDocumentManager.getInstance(project).isUncommited(document)) return null;
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(project)).getSynchronizer();
if (synchronizer.isDocumentAffectedByTransactions(document)) return null;
return document;
}
项目:tools-idea
文件:RangeMarkerTest.java
public void testPsi2Doc1() throws Exception {
StringBuilder buffer = new StringBuilder("0123456789");
RangeMarker marker = createMarker("0123456789", 2, 5);
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).getSynchronizer();
synchronizer.startTransaction(getProject(), marker.getDocument(), null);
synchronizer.insertString(marker.getDocument(), 3, "a");
buffer.insert(3, "a");
synchronizer.doCommitTransaction(marker.getDocument());
assertEquals(buffer.toString(), marker.getDocument().getText());
assertValidMarker(marker, 2, 6);
}
项目:tools-idea
文件:FormattingDocumentModelImpl.java
@Nullable
public static Document getDocumentToBeUsedFor(final PsiFile file) {
final Project project = file.getProject();
final Document document = PsiDocumentManager.getInstance(project).getDocument(file);
if (document == null) return null;
if (PsiDocumentManager.getInstance(project).isUncommited(document)) return null;
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(file.getProject())).getSynchronizer();
if (synchronizer.isDocumentAffectedByTransactions(document)) return null;
return document;
}
项目:consulo
文件:PsiEventWrapperAspect.java
private static void promoteNonPhysicalChangesToDocument(ASTNode rootElement, PsiFile file) {
if (file instanceof DummyHolder) return;
if (((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(file.getProject())).isCommitInProgress()) return;
VirtualFile vFile = file.getViewProvider().getVirtualFile();
if (vFile instanceof LightVirtualFile && !(vFile instanceof VirtualFileWindow)) {
Document document = FileDocumentManager.getInstance().getCachedDocument(vFile);
if (document != null) {
CharSequence text = rootElement.getChars();
PsiToDocumentSynchronizer.performAtomically(file, () -> document.replaceString(0, document.getTextLength(), text));
}
}
}
项目:consulo
文件:FormattingDocumentModelImpl.java
@Nullable
public static Document getDocumentToBeUsedFor(final PsiFile file) {
final Project project = file.getProject();
final Document document = PsiDocumentManager.getInstance(project).getDocument(file);
if (document == null) return null;
if (PsiDocumentManager.getInstance(project).isUncommited(document)) return null;
PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(file.getProject())).getSynchronizer();
if (synchronizer.isDocumentAffectedByTransactions(document)) return null;
return document;
}