Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/codan
diff options
context:
space:
mode:
authorAlena Laskavaia2010-05-05 19:59:17 +0000
committerAlena Laskavaia2010-05-05 19:59:17 +0000
commitaa8fb216e6b39827b6b04b48c2c655fa6add5294 (patch)
treeb75958277648ec72cbedcd15fbccc9ce464e3065 /codan
parentad974495abdb5f88eeaf020fa1c4f894d6bcd9b4 (diff)
downloadorg.eclipse.cdt-aa8fb216e6b39827b6b04b48c2c655fa6add5294.tar.gz
org.eclipse.cdt-aa8fb216e6b39827b6b04b48c2c655fa6add5294.tar.xz
org.eclipse.cdt-aa8fb216e6b39827b6b04b48c2c655fa6add5294.zip
- Added utility class to share between classes that want to open a file for marker
Diffstat (limited to 'codan')
-rw-r--r--codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/ui/CodanEditorUtility.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/ui/CodanEditorUtility.java b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/ui/CodanEditorUtility.java
new file mode 100644
index 00000000000..48be7a26a16
--- /dev/null
+++ b/codan/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/ui/CodanEditorUtility.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * $QNXLicenseC:
+ * Copyright 2008, QNX Software Systems. All Rights Reserved.
+ *
+ * You must obtain a written license from and pay applicable license fees to QNX
+ * Software Systems before you may reproduce, modify or distribute this software,
+ * or any work that includes all or part of this software. Free development
+ * licenses are available for evaluation and non-commercial purposes. For more
+ * information visit http://licensing.qnx.com or email licensing@qnx.com.
+ *
+ * This file may contain contributions from others. Please review this entire
+ * file for other proprietary rights or license notices, as well as the QNX
+ * Development Suite License Guide at http://licensing.qnx.com/license-guide/
+ * for other information.
+ * $
+ *******************************************************************************/
+/*
+ * Created by: Elena Laskavaia
+ * Created on: 2010-05-05
+ * Last modified by: $Author$
+ */
+package org.eclipse.cdt.codan.ui;
+
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.internal.ui.util.EditorUtility;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+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.IEditorPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * Utility tools to open editor and highlight the line
+ */
+public class CodanEditorUtility {
+ /**
+ * @param fileUrl - file "url", like file:/tmp/a.c#22
+ * @throws PartInitException
+ * @throws BadLocationException
+ */
+ public static void openFileURL(String fileUrl, IResource markerResource) throws PartInitException, BadLocationException {
+ String file = getFileFromURL(fileUrl);
+
+ IEditorPart part = openInEditor(file, markerResource);
+ int line = getLineFromURL(fileUrl);
+ revealLine(part, line);
+ }
+
+ /**
+ * Line is the part the follows # in this URL
+ * @return -1 if not line found in URL, and line number if there is
+ */
+ public static int getLineFromURL(String fileUrl) {
+ String sline = fileUrl.replaceAll(".*#(\\d+)$", "$1"); //$NON-NLS-1$ //$NON-NLS-2$
+ int line = -1;
+ try {
+ line = Integer.parseInt(sline);
+ } catch (NumberFormatException e2) {
+ // no line
+ }
+ return line;
+ }
+
+ public static String getFileFromURL(String link) {
+ String file = link.replaceFirst("^file:", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ file = file.replaceAll("#\\d+$", ""); //$NON-NLS-1$//$NON-NLS-2$
+ return file;
+ }
+
+ public static void revealLine(IEditorPart part, int line) throws BadLocationException {
+ if (line > 0) {
+ if (part instanceof ITextEditor) {
+ ITextEditor textEditor = (ITextEditor) part;
+ IDocument document = textEditor.getDocumentProvider().getDocument(part.getEditorInput());
+ textEditor.selectAndReveal(document.getLineOffset(line - 1), 0);
+ }
+ }
+ }
+
+ @SuppressWarnings("restriction")
+ public static IEditorPart openInEditor(String file, IResource markerResource) throws PartInitException {
+ IPath pfile = new Path(file);
+ ICElement element = null;
+ if (markerResource != null)
+ CoreModel.getDefault().create(markerResource);
+ IEditorPart part = EditorUtility.openInEditor(pfile, element);
+ return part;
+ }
+
+ public static IEditorPart openInEditor(IMarker marker) throws PartInitException {
+ String href = getLocationHRef(marker);
+ String file = getFileFromURL(href);
+ return openInEditor(file, marker.getResource());
+ }
+
+ public static String getLocationHRef(IMarker marker) {
+ String loc = marker.getResource().getLocationURI().toString();
+ String loc2 = marker.getAttribute(IMarker.LOCATION, ""); //$NON-NLS-1$
+ int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
+ if (loc2.length() > 0) {
+ loc = "file:" + loc2.replaceAll("[^:]*: ", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ String href = loc + "#" + line; //$NON-NLS-1$
+ return href;
+ }
+}

Back to the top