From b5fc4155da83f7086bd567b1d13251bc3b748a92 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 10 Sep 2015 20:06:19 +0300 Subject: [PATCH] EA-72909 - ISE: DocumentUndoProvider$MyEditorDocumentListener.beforeDocumentChange --- .../intellij/util/FileContentUtilCore.java | 4 ++-- .../psi/impl/PsiDocumentManagerImplTest.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/platform/core-api/src/com/intellij/util/FileContentUtilCore.java b/platform/core-api/src/com/intellij/util/FileContentUtilCore.java index 387407c21874..c7c9586ccb0d 100644 --- a/platform/core-api/src/com/intellij/util/FileContentUtilCore.java +++ b/platform/core-api/src/com/intellij/util/FileContentUtilCore.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -78,7 +78,7 @@ public class FileContentUtilCore { if (documentManager.isFileModified(file)) { Document document = documentManager.getDocument(file); if (document != null) { - documentManager.saveDocument(document); + documentManager.saveDocumentAsIs(document); // this can be called e.g. in context of undo, so we shouldn't modify document } } diff --git a/platform/platform-tests/testSrc/com/intellij/psi/impl/PsiDocumentManagerImplTest.java b/platform/platform-tests/testSrc/com/intellij/psi/impl/PsiDocumentManagerImplTest.java index 647a7f2fe29d..893ab3485879 100644 --- a/platform/platform-tests/testSrc/com/intellij/psi/impl/PsiDocumentManagerImplTest.java +++ b/platform/platform-tests/testSrc/com/intellij/psi/impl/PsiDocumentManagerImplTest.java @@ -25,7 +25,9 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.impl.LaterInvocator; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable; import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.editor.impl.TrailingSpacesStripper; import com.intellij.openapi.editor.impl.event.DocumentEventImpl; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -36,6 +38,7 @@ import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.source.PsiFileImpl; @@ -51,6 +54,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; +import java.util.Collections; import java.util.concurrent.atomic.AtomicInteger; public class PsiDocumentManagerImplTest extends PlatformTestCase { @@ -559,4 +564,20 @@ public class PsiDocumentManagerImplTest extends PlatformTestCase { assertTrue(getPsiDocumentManager().isCommitted(document)); LaterInvocator.leaveModal(dialog); } + + public void testReparseDoesNotModifyDocument() throws Exception { + VirtualFile file = createTempFile("txt", null, "foo", Charset.forName("UTF-8")); + file.putUserData(TrailingSpacesStripper.OVERRIDE_STRIP_TRAILING_SPACES_KEY, EditorSettingsExternalizable.STRIP_TRAILING_SPACES_WHOLE); + final Document document = FileDocumentManager.getInstance().getDocument(file); + assertNotNull(document); + WriteCommandAction.runWriteCommandAction(myProject, new Runnable() { + @Override + public void run() { + document.insertString(3, " "); + } + }); + + PsiDocumentManager.getInstance(myProject).reparseFiles(Collections.singleton(file), false); + assertEquals("foo ", VfsUtilCore.loadText(file)); + } }