Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3334/src/org/rubypeople/rdt/internal/ui/util Modified Files: StackTraceLine.java Added Files: LineBasedEditorOpener.java EditorOpener.java PositionBasedEditorOpener.java Log Message: Partial support for opening classes from Test::Unit failure. --- NEW FILE: PositionBasedEditorOpener.java --- package org.rubypeople.rdt.internal.ui.util; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.texteditor.ITextEditor; import org.jruby.lexer.yacc.ISourcePosition; public class PositionBasedEditorOpener extends EditorOpener { private final ISourcePosition position; public PositionBasedEditorOpener(String filename, ISourcePosition position) { super(filename); this.position = position; } protected void setEditorPosition(ITextEditor editor) { IDocument document = editor.getDocumentProvider().getDocument(editor.getEditorInput()); int start = position.getStartOffset(); int end = position.getEndOffset(); editor.selectAndReveal(start, end-start); } } --- NEW FILE: EditorOpener.java --- /** * */ package org.rubypeople.rdt.internal.ui.util; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.ITextEditor; import org.rubypeople.rdt.internal.ui.RubyPlugin; import org.rubypeople.rdt.internal.ui.rubyeditor.ExternalRubyFileEditorInput; public abstract class EditorOpener { private final String filename; public EditorOpener(String filename) { this.filename = filename; } public void open() { try { IEditorInput fileEditorInput = createEditorInput(filename); IWorkbench workbench = PlatformUI.getWorkbench(); IEditorRegistry editorRegistry = workbench.getEditorRegistry(); IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); IEditorDescriptor descriptor = editorRegistry.getDefaultEditor(filename); if (descriptor == null) return; ITextEditor editor = (ITextEditor) page.openEditor(fileEditorInput, editorId(descriptor)); setEditorPosition(editor); } catch (PartInitException e) { RubyPlugin.log(e); } } protected abstract void setEditorPosition(ITextEditor editor); private String editorId(IEditorDescriptor descriptor) { String editorId; if (descriptor == null) { editorId = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$ } else { editorId = descriptor.getId(); } return editorId; } private IEditorInput createEditorInput(String filename) { IFile file = getWorkspaceFile(filename); if (file == null) return new ExternalRubyFileEditorInput(new java.io.File(filename)); return new FileEditorInput(file); } private IFile getWorkspaceFile(String filename) { IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); IPath filepath = new Path(filename); IFile file = root.getFileForLocation(filepath); return file; } } Index: StackTraceLine.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/util/StackTraceLine.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** StackTraceLine.java 28 Mar 2005 23:22:44 -0000 1.1 --- StackTraceLine.java 13 Oct 2005 01:00:21 -0000 1.2 *************** *** 16,38 **** import java.util.regex.Pattern; - import org.eclipse.core.resources.IFile; - import org.eclipse.core.resources.IWorkspace; - import org.eclipse.core.resources.IWorkspaceRoot; - import org.eclipse.core.resources.ResourcesPlugin; - import org.eclipse.core.runtime.IPath; - import org.eclipse.core.runtime.Path; - import org.eclipse.jface.text.BadLocationException; - import org.eclipse.jface.text.IDocument; - import org.eclipse.ui.IEditorDescriptor; - import org.eclipse.ui.IEditorInput; - import org.eclipse.ui.IEditorRegistry; - import org.eclipse.ui.IWorkbench; - import org.eclipse.ui.IWorkbenchPage; - import org.eclipse.ui.PartInitException; - import org.eclipse.ui.PlatformUI; - import org.eclipse.ui.part.FileEditorInput; - import org.eclipse.ui.texteditor.ITextEditor; - import org.rubypeople.rdt.internal.ui.RubyPlugin; - import org.rubypeople.rdt.internal.ui.rubyeditor.ExternalRubyFileEditorInput; --- 16,19 ---- *************** *** 75,137 **** length = fFilename.length()+lineNumber.length()+1; } ! ! public void openEditor() { ! try { ! if (fFilename == null) ! return; ! IEditorInput fileEditorInput = createEditorInput(fFilename); ! IWorkbench workbench = PlatformUI.getWorkbench(); ! IEditorRegistry editorRegistry = workbench.getEditorRegistry(); ! IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); ! IEditorDescriptor descriptor = editorRegistry.getDefaultEditor(fFilename); ! if (descriptor == null) ! return; ! ITextEditor editor = (ITextEditor) page.openEditor(fileEditorInput, editorId(descriptor)); ! setEditorPosition(fLineNumber, editor); ! } catch (PartInitException e) { ! RubyPlugin.log(e); ! } ! } ! ! private void setEditorPosition(int lineNumber, ITextEditor editor) { ! try { ! if (lineNumber > 0) { ! IDocument document= editor.getDocumentProvider().getDocument(editor.getEditorInput()); ! editor.selectAndReveal(document.getLineOffset(lineNumber-1), document.getLineLength(lineNumber-1)); ! } ! } catch (BadLocationException doNothing) { ! } ! } ! ! private IEditorInput createEditorInput(String filename) { ! IFile file = getWorkspaceFile(filename); ! if (file == null) ! return new ExternalRubyFileEditorInput(new java.io.File(filename)); ! return new FileEditorInput(file); ! } ! ! private IFile getWorkspaceFile(String filename) { ! IWorkspace workspace = ResourcesPlugin.getWorkspace(); ! IWorkspaceRoot root = workspace.getRoot(); ! IPath filepath = new Path(filename); ! IFile file = root.getFileForLocation(filepath); ! ! return file; } - private static String editorId(IEditorDescriptor descriptor) - { - String editorId; - if (descriptor == null) - { - editorId = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$ - } - else - { - editorId = descriptor.getId(); - } - return editorId; - } - public int getLineNumber() { return fLineNumber; --- 56,66 ---- length = fFilename.length()+lineNumber.length()+1; } ! ! public void openEditor() { ! if (fFilename == null) ! return; ! new LineBasedEditorOpener(fFilename, fLineNumber).open(); } public int getLineNumber() { return fLineNumber; --- NEW FILE: LineBasedEditorOpener.java --- package org.rubypeople.rdt.internal.ui.util; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.ui.texteditor.ITextEditor; public class LineBasedEditorOpener extends EditorOpener { private final int lineNumber; public LineBasedEditorOpener(String filename, int lineNumber) { super(filename); this.lineNumber = lineNumber; } protected void setEditorPosition(ITextEditor editor) { try { if (lineNumber > 0) { IDocument document= editor.getDocumentProvider().getDocument(editor.getEditorInput()); int offset = document.getLineOffset(lineNumber-1); int length = document.getLineLength(lineNumber-1); editor.selectAndReveal(offset, length); } } catch (BadLocationException doNothing) { } } } |