diff --git a/platform/platform-impl/src/com/intellij/ide/actions/FixLineSeparatorsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/FixLineSeparatorsAction.java
new file mode 100644
index 000000000000..fe3b7d6443af
--- /dev/null
+++ b/platform/platform-impl/src/com/intellij/ide/actions/FixLineSeparatorsAction.java
@@ -0,0 +1,71 @@
+package com.intellij.ide.actions;
+
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.PlatformDataKeys;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.command.CommandProcessor;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.fileEditor.FileDocumentManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+
+/**
+ * @author yole
+ */
+public class FixLineSeparatorsAction extends AnAction {
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ Project project = e.getData(PlatformDataKeys.PROJECT);
+ final VirtualFile[] vFiles = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY);
+ if (project == null || vFiles == null) return;
+ CommandProcessor.getInstance().executeCommand(project, new Runnable() {
+ public void run() {
+ for (VirtualFile vFile : vFiles) {
+ fixSeparators(vFile);
+ }
+ }
+ }, "fixing line separators", null);
+ }
+
+ private static void fixSeparators(VirtualFile vFile) {
+ if (vFile.isDirectory()) {
+ for (VirtualFile child : vFile.getChildren()) {
+ fixSeparators(child);
+ }
+ }
+ else {
+ if (vFile.getFileType().isBinary()) {
+ return;
+ }
+ final Document document = FileDocumentManager.getInstance().getDocument(vFile);
+ if (areSeparatorsBroken(document)) {
+ fixSeparators(document);
+ }
+ }
+ }
+
+ private static boolean areSeparatorsBroken(Document document) {
+ final int count = document.getLineCount();
+ for (int i = 1; i < count; i += 2) {
+ if (document.getLineStartOffset(i) != document.getLineEndOffset(i)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static void fixSeparators(final Document document) {
+ ApplicationManager.getApplication().runWriteAction(new Runnable() {
+ public void run() {
+ int i = 1;
+ while(i < document.getLineCount()) {
+ final int start = document.getLineEndOffset(i);
+ final int end = document.getLineEndOffset(i) + document.getLineSeparatorLength(i);
+ document.deleteString(start, end);
+ i++;
+ }
+ }
+ });
+ }
+}
diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml
index 4e5ba9952f36..ed2c4f9f03f3 100644
--- a/platform/platform-resources/src/idea/PlatformActions.xml
+++ b/platform/platform-resources/src/idea/PlatformActions.xml
@@ -382,6 +382,7 @@
+