From d099240a63524ec54fee7cd26b843fd15266c901 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 29 Sep 2009 19:46:09 +0400 Subject: [PATCH] fix line separators in Ruby testdata --- .../ide/actions/FixLineSeparatorsAction.java | 71 +++++++++++++++++++ .../src/idea/PlatformActions.xml | 1 + 2 files changed, 72 insertions(+) create mode 100644 platform/platform-impl/src/com/intellij/ide/actions/FixLineSeparatorsAction.java 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 @@ +