diff --git a/cnd.modelutil/src/org/netbeans/modules/cnd/modelutil/CsmUtilities.java b/cnd.modelutil/src/org/netbeans/modules/cnd/modelutil/CsmUtilities.java --- a/cnd.modelutil/src/org/netbeans/modules/cnd/modelutil/CsmUtilities.java +++ b/cnd.modelutil/src/org/netbeans/modules/cnd/modelutil/CsmUtilities.java @@ -79,11 +79,7 @@ import java.util.Collection; import javax.swing.JEditorPane; import javax.swing.SwingUtilities; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.StyledDocument; +import javax.swing.text.*; import org.netbeans.api.editor.mimelookup.MimeLookup; import org.netbeans.api.lexer.InputAttributes; import org.netbeans.api.lexer.Language; @@ -107,6 +103,7 @@ import org.openide.loaders.DataObject; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObjectNotFoundException; +import org.openide.text.Line; import org.openide.util.Exceptions; import org.openide.util.RequestProcessor; import org.openide.windows.TopComponent; @@ -773,6 +770,51 @@ if (dob != null) { final EditorCookie.Observable ec = dob.getCookie(EditorCookie.Observable.class); if (ec != null) { + final Document doc; + try { + doc = ec.openDocument(); + } catch (IOException ex) { + // Document could not be loaded (e.g. user refused loading of large document) + return false; + } + // jumpToElement() copied and modified + doc.render(new Runnable() { + @Override + public void run() { + int start; + int lineIndex; + final int column; + Offsetable offsetable = element.getOffsetable(); + Point point = element.getPoint(); + Element lineRoot = doc.getDefaultRootElement(); + if (offsetable == null) { + lineIndex = point.line - 1; + column = point.column; + start = lineRoot.getElement(lineIndex).getStartOffset(); + start += point.column; + } else { + start = offsetable.getOffset(); + lineIndex = lineRoot.getElementIndex(start); + column = start - lineRoot.getElement(lineIndex).getStartOffset(); + } + if (start >= 0 && start < doc.getLength()) { + final Line line = ec.getLineSet().getCurrent(lineIndex); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + line.show(Line.ShowOpenType.OPEN, Line.ShowVisibilityType.FOCUS, column); + } + }); + if (DEBUG) { + System.err.println("I'm going to " + start + " for element " + element); + } + } + StatusDisplayer.getDefault().setStatusText(""); // NOI18N + } + }); + // End-of-jumpToElement() copy + if (true) return true; + SwingUtilities.invokeLater(new Runnable() { @Override