fix line separators in Ruby testdata

This commit is contained in:
Dmitry Jemerov
2009-09-29 19:46:09 +04:00
parent e5d40b5642
commit d099240a63
2 changed files with 72 additions and 0 deletions
@@ -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++;
}
}
});
}
}
@@ -382,6 +382,7 @@
<action internal="true" id="ReloadProjectAction" class="com.intellij.internal.ReloadProjectAction"/>
<action internal="true" id="RestartInfo" class="com.intellij.internal.RestartInfoAction" text="Restart Info"/>
<action internal="true" id="PruneEmptyDirectories" class="com.intellij.ide.actions.PruneEmptyDirectoriesAction" text="Prune Empty Directories"/>
<action internal="true" id="FixLineSeparators" class="com.intellij.ide.actions.FixLineSeparatorsAction" text="Fix Line Separators"/>
<add-to-group group-id="ToolsMenu" anchor="last"/>
</group>