Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskHyperlinkDetectorTest.java5
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskRelationHyperlinkDetectorTest.java10
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java140
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskRelationHyperlinkDetector.java16
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java7
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractTaskHyperlinkDetector.java177
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracHyperlinkUtilTest.java81
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java33
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtil.java80
9 files changed, 294 insertions, 255 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskHyperlinkDetectorTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskHyperlinkDetectorTest.java
index 107a2b6c3..0666da543 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskHyperlinkDetectorTest.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskHyperlinkDetectorTest.java
@@ -24,6 +24,7 @@ import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.tests.TaskTestUtil;
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnectorUi;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
+import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
/**
* @author Steffen Pingel
@@ -41,7 +42,7 @@ public class TaskHyperlinkDetectorTest extends TestCase {
}
protected IHyperlink[] detect(final String text, int start, int length) {
- TaskHyperlinkDetector detector = createHyperlinkDetector();
+ AbstractTaskHyperlinkDetector detector = createHyperlinkDetector();
return detector.detectHyperlinks(new TextViewer() {
@Override
public IDocument getDocument() {
@@ -50,7 +51,7 @@ public class TaskHyperlinkDetectorTest extends TestCase {
}, new Region(start, length), true);
}
- protected TaskHyperlinkDetector createHyperlinkDetector() {
+ protected AbstractTaskHyperlinkDetector createHyperlinkDetector() {
TaskHyperlinkDetector detector = new TaskHyperlinkDetector() {
@Override
protected TaskRepository getTaskRepository(ITextViewer textViewer) {
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskRelationHyperlinkDetectorTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskRelationHyperlinkDetectorTest.java
index de2cc5f19..fb18b6340 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskRelationHyperlinkDetectorTest.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/TaskRelationHyperlinkDetectorTest.java
@@ -12,10 +12,9 @@
package org.eclipse.mylyn.tasks.tests.ui;
import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.mylyn.internal.tasks.ui.editors.TaskHyperlinkDetector;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskRelationHyperlinkDetector;
import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
+import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
/**
* @author Steffen Pingel
@@ -23,17 +22,12 @@ import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
public class TaskRelationHyperlinkDetectorTest extends TaskHyperlinkDetectorTest {
@Override
- protected TaskHyperlinkDetector createHyperlinkDetector() {
+ protected AbstractTaskHyperlinkDetector createHyperlinkDetector() {
TaskRelationHyperlinkDetector detector = new TaskRelationHyperlinkDetector() {
@Override
protected TaskRepository getTaskRepository(ITextViewer textViewer) {
return repository;
}
-
- @Override
- protected AbstractRepositoryConnectorUi getConnectorUi(TaskRepository repository) {
- return connectorUi;
- }
};
return detector;
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
index 105f9bfcd..d3d7cfd06 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskHyperlinkDetector.java
@@ -7,120 +7,35 @@
*
* Contributors:
* Tasktop Technologies - initial API and implementation
- * Eugene Kuleshov - improvements
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.ui.editors;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Iterator;
import java.util.List;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
/**
- * @author Rob Elves
+ * Delegates to {@link AbstractRepositoryConnectorUi} for detecting hyperlinks.
+ *
* @author Steffen Pingel
- * @author Eugene Kuleshov
- * @author Terry Hon
*/
-public class TaskHyperlinkDetector extends AbstractHyperlinkDetector {
+public class TaskHyperlinkDetector extends AbstractTaskHyperlinkDetector {
- public IHyperlink[] detectHyperlinks(ITextViewer textViewer, final IRegion region, boolean canShowMultipleHyperlinks) {
- if (region == null || textViewer == null) {
- return null;
- }
-
- IDocument document = textViewer.getDocument();
- if (document == null || document.getLength() == 0) {
- return null;
- }
-
- String content;
- int contentOffset;
- int index;
- try {
- if (region.getLength() == 0) {
- // expand the region to include the whole line
- IRegion lineInfo = document.getLineInformationOfOffset(region.getOffset());
- int lineLength = lineInfo.getLength();
- int lineOffset = lineInfo.getOffset();
- int lineEnd = lineOffset + lineLength;
- int regionEnd = region.getOffset() + region.getLength();
- if (lineOffset < region.getOffset()) {
- int regionLength = Math.max(regionEnd, lineEnd) - lineOffset;
- contentOffset = lineOffset;
- content = document.get(lineOffset, regionLength);
- index = region.getOffset() - lineOffset;
- } else {
- // the line starts after region, may never happen
- int regionLength = Math.max(regionEnd, lineEnd) - region.getOffset();
- contentOffset = region.getOffset();
- content = document.get(contentOffset, regionLength);
- index = 0;
- }
- } else {
- content = document.get(region.getOffset(), region.getLength());
- contentOffset = region.getOffset();
- index = -1;
- }
- } catch (BadLocationException ex) {
- return null;
- }
-
- List<TaskRepository> repositories = new ArrayList<TaskRepository>();
- TaskRepository selectedRepository = getTaskRepository(textViewer);
- if (selectedRepository != null) {
- repositories.add(selectedRepository);
- } else {
- repositories.addAll(TasksUi.getRepositoryManager().getAllRepositories());
- }
-
- List<IHyperlink> hyperlinks = detectHyperlinks(content, index, contentOffset, repositories);
- if (hyperlinks == null) {
- return null;
- }
-
- // filter hyperlinks that do not match original region
- if (region.getLength() == 0) {
- for (Iterator<IHyperlink> it = hyperlinks.iterator(); it.hasNext();) {
- IHyperlink hyperlink = it.next();
- IRegion hyperlinkRegion = hyperlink.getHyperlinkRegion();
- if (!isInRegion(region, hyperlinkRegion)) {
- it.remove();
- }
- }
- }
- if (hyperlinks.isEmpty()) {
- return null;
- }
-
- return hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
- }
-
- protected List<IHyperlink> detectHyperlinks(final String content, final int index, final int contentOffset,
- List<TaskRepository> repositories) {
+ @Override
+ protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, final String content, final int index,
+ final int contentOffset) {
List<IHyperlink> result = null;
- for (final TaskRepository repository : repositories) {
+ for (final TaskRepository repository : getTaskRepositories(textViewer)) {
final AbstractRepositoryConnectorUi connectorUi = getConnectorUi(repository);
if (connectorUi == null) {
continue;
@@ -150,43 +65,4 @@ public class TaskHyperlinkDetector extends AbstractHyperlinkDetector {
return TasksUiPlugin.getConnectorUi(repository.getConnectorKind());
}
- private boolean isInRegion(IRegion matchRegion, IRegion hyperlinkRegion) {
- return matchRegion.getOffset() >= hyperlinkRegion.getOffset()
- && matchRegion.getOffset() <= hyperlinkRegion.getOffset() + hyperlinkRegion.getLength();
- }
-
- protected TaskRepository getTaskRepository(ITextViewer textViewer) {
- TaskRepository repository = (TaskRepository) getAdapter(TaskRepository.class);
- if (repository != null) {
- return repository;
- }
-
- IResource resource = (IResource) getAdapter(IResource.class);
- if (resource == null) {
- if (textViewer instanceof RepositoryTextViewer) {
- RepositoryTextViewer viewer = (RepositoryTextViewer) textViewer;
- return viewer.getRepository();
- }
-
- // use currently active editor (if any)
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window != null) {
- IWorkbenchPage activePage = window.getActivePage();
- if (activePage != null) {
- IWorkbenchPart part = activePage.getActivePart();
- if (part instanceof IEditorPart) {
- IEditorInput input = ((IEditorPart) part).getEditorInput();
- if (input != null) {
- resource = (IResource) input.getAdapter(IResource.class);
- }
- }
- }
- }
- }
- if (resource != null) {
- return TasksUiPlugin.getDefault().getRepositoryForResource(resource);
- }
- return null;
- }
-
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskRelationHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskRelationHyperlinkDetector.java
index d7a7d0dec..4e05efabb 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskRelationHyperlinkDetector.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskRelationHyperlinkDetector.java
@@ -23,24 +23,25 @@ import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
import org.eclipse.mylyn.tasks.ui.TaskHyperlink;
/**
* @author Steffen Pingel
*/
-public class TaskRelationHyperlinkDetector extends TaskHyperlinkDetector {
+public class TaskRelationHyperlinkDetector extends AbstractTaskHyperlinkDetector {
private static Pattern HYPERLINK_PATTERN = Pattern.compile("([^\\s,]+)");
@Override
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
- if (region == null || textViewer == null || textViewer.getDocument() == null) {
- return null;
- }
-
if (region.getLength() > 0) {
return super.detectHyperlinks(textViewer, region, canShowMultipleHyperlinks);
} else {
+ if (textViewer.getDocument() == null) {
+ return null;
+ }
+
TaskRepository taskRepository = getTaskRepository(textViewer);
if (taskRepository != null) {
String prefix = extractPrefix(textViewer, region.getOffset());
@@ -56,10 +57,9 @@ public class TaskRelationHyperlinkDetector extends TaskHyperlinkDetector {
}
@Override
- protected List<IHyperlink> detectHyperlinks(String content, int index, int contentOffset,
- List<TaskRepository> repositories) {
+ protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int index, int contentOffset) {
List<IHyperlink> links = null;
- for (TaskRepository repository : repositories) {
+ for (TaskRepository repository : getTaskRepositories(textViewer)) {
Matcher m = HYPERLINK_PATTERN.matcher(content);
while (m.find()) {
if (links == null) {
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java
index 24815ce2e..4971dee19 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskUrlHyperlinkDetector.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * Copyright (c) 2004, 2008 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -22,9 +22,11 @@ import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
/**
- * Source from {@link org.eclipse.jface.text.hyperlink.URLHyperlinkDetector}
+ * Source from {@link org.eclipse.jface.text.hyperlink.URLHyperlinkDetector}. Returns hyperlinks that use
+ * {@link TasksUiUtil} to open urls.
*
* @author Rob Elves
*/
@@ -153,4 +155,5 @@ public class TaskUrlHyperlinkDetector extends AbstractHyperlinkDetector {
IRegion urlRegion = new Region(offset + urlOffsetInLine, urlLength);
return new IHyperlink[] { new TaskUrlHyperlink(urlRegion, urlString) };
}
+
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractTaskHyperlinkDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractTaskHyperlinkDetector.java
new file mode 100644
index 000000000..1210f23de
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/AbstractTaskHyperlinkDetector.java
@@ -0,0 +1,177 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ * Eugene Kuleshov - improvements
+ *******************************************************************************/
+
+package org.eclipse.mylyn.tasks.ui;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.internal.tasks.ui.editors.RepositoryTextViewer;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Base class for hyperlink detectors that provides methods for extracting text from an {@link ITextViewer}.
+ *
+ * @author Rob Elves
+ * @author Steffen Pingel
+ * @author Eugene Kuleshov
+ * @author Terry Hon
+ * @since 3.1
+ */
+public abstract class AbstractTaskHyperlinkDetector extends AbstractHyperlinkDetector {
+
+ /**
+ * @since 3.1
+ */
+ public AbstractTaskHyperlinkDetector() {
+ }
+
+ /**
+ * @since 3.1
+ */
+ public IHyperlink[] detectHyperlinks(ITextViewer textViewer, final IRegion region, boolean canShowMultipleHyperlinks) {
+ IDocument document = textViewer.getDocument();
+ if (document == null || document.getLength() == 0) {
+ return null;
+ }
+
+ String content;
+ int contentOffset;
+ int index;
+ try {
+ if (region.getLength() == 0) {
+ // expand the region to include the whole line
+ IRegion lineInfo = document.getLineInformationOfOffset(region.getOffset());
+ int lineLength = lineInfo.getLength();
+ int lineOffset = lineInfo.getOffset();
+ int lineEnd = lineOffset + lineLength;
+ int regionEnd = region.getOffset() + region.getLength();
+ if (lineOffset < region.getOffset()) {
+ int regionLength = Math.max(regionEnd, lineEnd) - lineOffset;
+ contentOffset = lineOffset;
+ content = document.get(lineOffset, regionLength);
+ index = region.getOffset() - lineOffset;
+ } else {
+ // the line starts after region, may never happen
+ int regionLength = Math.max(regionEnd, lineEnd) - region.getOffset();
+ contentOffset = region.getOffset();
+ content = document.get(contentOffset, regionLength);
+ index = 0;
+ }
+ } else {
+ content = document.get(region.getOffset(), region.getLength());
+ contentOffset = region.getOffset();
+ index = -1;
+ }
+ } catch (BadLocationException ex) {
+ return null;
+ }
+
+ List<IHyperlink> hyperlinks = detectHyperlinks(textViewer, content, contentOffset, index);
+ if (hyperlinks == null) {
+ return null;
+ }
+
+ // filter hyperlinks that do not match original region
+ if (region.getLength() == 0) {
+ for (Iterator<IHyperlink> it = hyperlinks.iterator(); it.hasNext();) {
+ IHyperlink hyperlink = it.next();
+ IRegion hyperlinkRegion = hyperlink.getHyperlinkRegion();
+ if (!isInRegion(region, hyperlinkRegion)) {
+ it.remove();
+ }
+ }
+ }
+ if (hyperlinks.isEmpty()) {
+ return null;
+ }
+ return hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
+ }
+
+ /**
+ * @since 3.1
+ */
+ protected abstract List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int contentOffset,
+ int index);
+
+ private boolean isInRegion(IRegion detectInRegion, IRegion hyperlinkRegion) {
+ return detectInRegion.getOffset() >= hyperlinkRegion.getOffset()
+ && detectInRegion.getOffset() <= hyperlinkRegion.getOffset() + hyperlinkRegion.getLength();
+ }
+
+ /**
+ * @since 3.1
+ */
+ protected List<TaskRepository> getTaskRepositories(ITextViewer textViewer) {
+ List<TaskRepository> repositories = new ArrayList<TaskRepository>();
+ TaskRepository selectedRepository = getTaskRepository(textViewer);
+ if (selectedRepository != null) {
+ repositories.add(selectedRepository);
+ } else {
+ repositories.addAll(TasksUi.getRepositoryManager().getAllRepositories());
+ }
+ return repositories;
+ }
+
+ /**
+ * @since 3.1
+ */
+ protected TaskRepository getTaskRepository(ITextViewer textViewer) {
+ TaskRepository repository = (TaskRepository) getAdapter(TaskRepository.class);
+ if (repository != null) {
+ return repository;
+ }
+
+ IResource resource = (IResource) getAdapter(IResource.class);
+ if (resource == null) {
+ if (textViewer instanceof RepositoryTextViewer) {
+ RepositoryTextViewer viewer = (RepositoryTextViewer) textViewer;
+ return viewer.getRepository();
+ }
+
+ // use currently active editor (if any)
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null) {
+ IWorkbenchPage activePage = window.getActivePage();
+ if (activePage != null) {
+ IWorkbenchPart part = activePage.getActivePart();
+ if (part instanceof IEditorPart) {
+ IEditorInput input = ((IEditorPart) part).getEditorInput();
+ if (input != null) {
+ resource = (IResource) input.getAdapter(IResource.class);
+ }
+ }
+ }
+ }
+ }
+ if (resource != null) {
+ return TasksUiPlugin.getDefault().getRepositoryForResource(resource);
+ }
+ return null;
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracHyperlinkUtilTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracHyperlinkUtilTest.java
index adf6a452e..b113b6b0b 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracHyperlinkUtilTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracHyperlinkUtilTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2006, 2008 Steffen Pingel and others.
+ * Copyright (c) 2006, 2008 Steffen Pingel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -12,6 +12,8 @@
package org.eclipse.mylyn.trac.tests;
+import java.util.List;
+
import junit.framework.TestCase;
import org.eclipse.jface.text.Region;
@@ -33,13 +35,11 @@ public class TracHyperlinkUtilTest extends TestCase {
@Override
protected void setUp() throws Exception {
- super.setUp();
-
repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, "http://localhost");
}
public void testFindHyperlinksComment() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "comment:ticket:12:34", 0, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "comment:ticket:12:34", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(new Region(0, 20), links[0].getHyperlinkRegion());
@@ -66,88 +66,86 @@ public class TracHyperlinkUtilTest extends TestCase {
}
public void testFindHyperlinksReport() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "report:123", 0, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "report:123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 10), links[0].getHyperlinkRegion());
assertEquals("http://localhost/report/123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "{123}", 0, 0);
+ links = findTracHyperlinks(repository, "{123}", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 5), links[0].getHyperlinkRegion());
assertEquals("http://localhost/report/123", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksChangeset() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "r123", 0, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "r123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 4), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "[123]", 0, 0);
+ links = findTracHyperlinks(repository, "[123]", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 5), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "![123]", 0, 0);
+ links = findTracHyperlinks(repository, "![123]", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "![123]", 1, 0);
+ links = findTracHyperlinks(repository, "![123]", 1, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "changeset:123", 0, 0);
+ links = findTracHyperlinks(repository, "changeset:123", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 13), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "[123/trunk]", 0, 0);
+ links = findTracHyperlinks(repository, "[123/trunk]", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 11), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123/trunk", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "changeset:123/trunk", 0, 0);
+ links = findTracHyperlinks(repository, "changeset:123/trunk", 0, 0);
assertEquals(1, links.length);
assertEquals(new Region(0, 19), links[0].getHyperlinkRegion());
assertEquals("http://localhost/changeset/123/trunk", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksRevisionLog() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "r123:456", 0, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "r123:456", 0, 0);
assertEquals(2, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 8), links[0].getHyperlinkRegion());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "[123:456]", 0, 0);
+ links = findTracHyperlinks(repository, "[123:456]", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 9), links[0].getHyperlinkRegion());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "log:@123:456", 0, 0);
+ links = findTracHyperlinks(repository, "log:@123:456", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 12), links[0].getHyperlinkRegion());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "log:trunk@123:456", 0, 0);
+ links = findTracHyperlinks(repository, "log:trunk@123:456", 0, 0);
assertEquals(1, links.length);
assertEquals("http://localhost/log/trunk?rev=123&stop_rev=456", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 17), links[0].getHyperlinkRegion());
}
public void testFindHyperlinksDiff() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "diff:@123:456", 0, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "diff:@123:456", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/changeset/?new=456&old=123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository,
- "diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539", 0, 0);
+ links = findTracHyperlinks(repository, "diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(
"http://localhost/changeset/?new_path=sandbox%2Fvc-refactoring%2Ftrac&old_path=trunk%2Ftrac&new=3539&old=3538",
((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository,
- "diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default", 0, 0);
+ links = findTracHyperlinks(repository, "diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals(
@@ -156,83 +154,88 @@ public class TracHyperlinkUtilTest extends TestCase {
}
public void testFindHyperlinksWiki() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "[wiki:page]", 1, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "[wiki:page]", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/page", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "wiki:page", 0, 0);
+ links = findTracHyperlinks(repository, "wiki:page", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/page", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "Page", 0, 0);
+ links = findTracHyperlinks(repository, "Page", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "!Page", 0, 0);
+ links = findTracHyperlinks(repository, "!Page", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "ab Page dc", 0, 0);
+ links = findTracHyperlinks(repository, "ab Page dc", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "paGe", 0, 0);
+ links = findTracHyperlinks(repository, "paGe", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "WikiPage", 0, 0);
+ links = findTracHyperlinks(repository, "WikiPage", 0, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/WikiPage", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(0, 8), links[0].getHyperlinkRegion());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "!WikiPage", 0, 0);
+ links = findTracHyperlinks(repository, "!WikiPage", 0, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "!WikiPage", 1, 0);
+ links = findTracHyperlinks(repository, "!WikiPage", 1, 0);
assertNull(links);
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "a WikiPage is here", 4, 0);
+ links = findTracHyperlinks(repository, "a WikiPage is here", 4, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/wiki/WikiPage", ((WebHyperlink) links[0]).getURLString());
assertEquals(new Region(2, 8), links[0].getHyperlinkRegion());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "a !WikiPage is here", 4, 0);
+ links = findTracHyperlinks(repository, "a !WikiPage is here", 4, 0);
assertNull(links);
}
public void testFindHyperlinksMilestone() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "milestone:1.0", 1, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "milestone:1.0", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/milestone/1.0", ((WebHyperlink) links[0]).getURLString());
}
public void testFindHyperlinksAttachment() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "attachment:ticket:123:foo.bar", 1, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "attachment:ticket:123:foo.bar", 1, 0);
assertNotNull(links);
assertEquals("123", ((TaskHyperlink) links[0]).getTaskId());
}
public void testFindHyperlinksFiles() {
- IHyperlink[] links = TracHyperlinkUtil.findTracHyperlinks(repository, "source:trunk/foo", 1, 0);
+ IHyperlink[] links = findTracHyperlinks(repository, "source:trunk/foo", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "source:trunk/foo@123", 1, 0);
+ links = findTracHyperlinks(repository, "source:trunk/foo@123", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo?rev=123", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "source:trunk/foo@123#L456", 1, 0);
+ links = findTracHyperlinks(repository, "source:trunk/foo@123#L456", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/trunk/foo?rev=123#L456", ((WebHyperlink) links[0]).getURLString());
- links = TracHyperlinkUtil.findTracHyperlinks(repository, "source:/tags/foo_bar-1.1", 1, 0);
+ links = findTracHyperlinks(repository, "source:/tags/foo_bar-1.1", 1, 0);
assertNotNull(links);
assertEquals(1, links.length);
assertEquals("http://localhost/browser/tags/foo_bar-1.1", ((WebHyperlink) links[0]).getURLString());
}
+ private IHyperlink[] findTracHyperlinks(TaskRepository repository, String text, int offsetInText, int textOffset) {
+ List<IHyperlink> links = TracHyperlinkUtil.findTracHyperlinks(repository, text, offsetInText, textOffset);
+ return (links.isEmpty()) ? null : links.toArray(new IHyperlink[0]);
+ }
+
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
index 529838bc4..30787dd7b 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2006, 2008 Steffen Pingel and others.
+ * Copyright (c) 2006, 2008 Steffen Pingel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,42 +11,27 @@
package org.eclipse.mylyn.internal.trac.ui;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IRegion;
+import java.util.List;
+
import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
import org.eclipse.jface.text.hyperlink.IHyperlink;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.AbstractTaskHyperlinkDetector;
/**
* @author Steffen Pingel
*/
-public class TracHyperlinkDetector extends AbstractHyperlinkDetector {
+public class TracHyperlinkDetector extends AbstractTaskHyperlinkDetector {
public TracHyperlinkDetector() {
}
- public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
- TaskRepository taskRepository = (TaskRepository) getAdapter(TaskRepository.class);
+ @Override
+ protected List<IHyperlink> detectHyperlinks(ITextViewer textViewer, String content, int contentOffset, int index) {
+ TaskRepository taskRepository = getTaskRepository(textViewer);
if (taskRepository != null && TracCorePlugin.CONNECTOR_KIND.equals(taskRepository.getConnectorKind())) {
- IDocument document = textViewer.getDocument();
- if (document == null) {
- return null;
- }
-
- IRegion lineInfo;
- String line;
- try {
- lineInfo = document.getLineInformationOfOffset(region.getOffset());
- line = document.get(lineInfo.getOffset(), lineInfo.getLength());
- } catch (BadLocationException ex) {
- return null;
- }
-
- return TracHyperlinkUtil.findTracHyperlinks(taskRepository, line,
- region.getOffset() - lineInfo.getOffset(), lineInfo.getOffset());
+ return TracHyperlinkUtil.findTracHyperlinks(taskRepository, content, index, contentOffset);
}
return null;
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtil.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtil.java
index 076a9a25e..665ca61df 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtil.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtil.java
@@ -1,5 +1,5 @@
/*******************************************************************************
-* Copyright (c) 2006, 2008 Steffen Pingel and others.
+ * Copyright (c) 2006, 2008 Steffen Pingel and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -112,70 +112,70 @@ public class TracHyperlinkUtil {
*
* @see http://trac.edgewall.org/wiki/TracLinks
*/
- public static IHyperlink[] findTracHyperlinks(TaskRepository repository, String text, int lineOffset,
- int regionOffset) {
+ public static List<IHyperlink> findTracHyperlinks(TaskRepository repository, String text, int offsetInText,
+ int textOffset) {
List<IHyperlink> links = new ArrayList<IHyperlink>();
Matcher m = ticketPattern.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String id = m.group(2);
- links.add(new TaskHyperlink(determineRegion(regionOffset, m), repository, id));
+ links.add(new TaskHyperlink(determineRegion(textOffset, m), repository, id));
}
}
m = commentPattern.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String id = m.group(1);
// String comment = m.group(2);
- links.add(new TaskHyperlink(determineRegion(regionOffset, m), repository, id));
+ links.add(new TaskHyperlink(determineRegion(textOffset, m), repository, id));
}
}
m = reportPattern1.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String id = m.group(1);
- links.add(new WebHyperlink(determineRegion(regionOffset, m), repository.getRepositoryUrl()
+ links.add(new WebHyperlink(determineRegion(textOffset, m), repository.getRepositoryUrl()
+ ITracClient.REPORT_URL + id));
}
}
m = reportPattern2.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String id = m.group(1);
- links.add(new WebHyperlink(determineRegion(regionOffset, m), repository.getRepositoryUrl()
+ links.add(new WebHyperlink(determineRegion(textOffset, m), repository.getRepositoryUrl()
+ ITracClient.REPORT_URL + id));
}
}
m = revisionLogPattern1.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String rev = m.group(1);
String stopRev = m.group(2);
String url = repository.getRepositoryUrl() + ITracClient.REVISION_LOG_URL + "?rev=" + rev
+ "&stop_rev=" + stopRev;
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = revisionLogPattern2.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String rev = m.group(1);
String stopRev = m.group(2);
String url = repository.getRepositoryUrl() + ITracClient.REVISION_LOG_URL + "?rev=" + rev
+ "&stop_rev=" + stopRev;
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = revisionLogPattern3.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String branch = m.group(1);
String rev = m.group(2);
String stopRev = m.group(3);
@@ -184,50 +184,50 @@ public class TracHyperlinkUtil {
url += branch;
}
url += "?rev=" + rev + "&stop_rev=" + stopRev;
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = changesetPattern1.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String rev = m.group(2);
String branch = m.group(3);
String url = repository.getRepositoryUrl() + ITracClient.CHANGESET_URL + rev;
if (branch != null) {
url += branch;
}
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = changesetPattern2.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String rev = m.group(1);
String branch = m.group(2);
String url = repository.getRepositoryUrl() + ITracClient.CHANGESET_URL + rev;
if (branch != null) {
url += branch;
}
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = diffPattern1.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String old_rev = m.group(1);
String new_rev = m.group(2);
String url = repository.getRepositoryUrl() + ITracClient.CHANGESET_URL;
url += "?new=" + new_rev + "&old=" + old_rev;
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = diffPattern2.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String old_path = m.group(1);
String old_rev = m.group(3);
String new_path = m.group(4);
@@ -246,49 +246,49 @@ public class TracHyperlinkUtil {
if (old_rev != null) {
url += "&old=" + old_rev;
}
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
m = wikiPattern1.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String page = m.group(1);
- links.add(new WebHyperlink(determineRegion(regionOffset, m), repository.getRepositoryUrl()
+ links.add(new WebHyperlink(determineRegion(textOffset, m), repository.getRepositoryUrl()
+ ITracClient.WIKI_URL + page));
}
}
m = wikiPattern2.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String page = m.group(0);
- links.add(new WebHyperlink(determineRegion(regionOffset, m), repository.getRepositoryUrl()
+ links.add(new WebHyperlink(determineRegion(textOffset, m), repository.getRepositoryUrl()
+ ITracClient.WIKI_URL + page));
}
}
m = milestonePattern.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String milestone = m.group(1);
- links.add(new WebHyperlink(determineRegion(regionOffset, m), repository.getRepositoryUrl()
+ links.add(new WebHyperlink(determineRegion(textOffset, m), repository.getRepositoryUrl()
+ ITracClient.MILESTONE_URL + milestone));
}
}
m = attachmentPattern.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String id = m.group(1);
// String attachment = m.group(2);
- links.add(new TaskHyperlink(determineRegion(regionOffset, m), repository, id));
+ links.add(new TaskHyperlink(determineRegion(textOffset, m), repository, id));
}
}
m = filesPattern.matcher(text);
while (m.find()) {
- if (isInRegion(lineOffset, m)) {
+ if (isInRegion(offsetInText, m)) {
String filename = m.group(1);
String rev = m.group(3);
String line = m.group(5);
@@ -299,19 +299,19 @@ public class TracHyperlinkUtil {
url += "#L" + line;
}
}
- links.add(new WebHyperlink(determineRegion(regionOffset, m), url));
+ links.add(new WebHyperlink(determineRegion(textOffset, m), url));
}
}
- return links.isEmpty() ? null : links.toArray(new IHyperlink[0]);
+ return links;
}
- private static boolean isInRegion(int lineOffset, Matcher m) {
- return (lineOffset >= m.start() && lineOffset <= m.end());
+ private static boolean isInRegion(int offsetInText, Matcher m) {
+ return (offsetInText == -1) || (offsetInText >= m.start() && offsetInText <= m.end());
}
- private static IRegion determineRegion(int regionOffset, Matcher m) {
- return new Region(regionOffset + m.start(), m.end() - m.start());
+ private static IRegion determineRegion(int textOffset, Matcher m) {
+ return new Region(textOffset + m.start(), m.end() - m.start());
}
}

Back to the top