Bug 575348: [Issues] Add trimming of task messages

Change-Id: I5ea9c3b1290eb8311074d19490505a6245ebe8f4
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
index caf4e84..ab6cefe 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
@@ -15,6 +15,7 @@
 package org.eclipse.statet.ltk.issues.core.impl;
 
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullLateInit;
 
 import java.util.HashMap;
 import java.util.List;
@@ -39,18 +40,18 @@
 public class TaskMarkerHandler {
 	
 	
-	private final String markerId;
+	private final String markerType;
 	
 	private @Nullable Pattern taskTagPattern;
 	private final Map<String, TaskPriority> taskTagMap= new HashMap<>();
 	
-	private SourceContent sourceContent;
-	private IResource resource;
+	private SourceContent sourceContent= nonNullLateInit();
+	private IResource resource= nonNullLateInit();
 	private @Nullable Matcher taskTagMatcher;
 	
 	
-	public TaskMarkerHandler(final String markerId) {
-		this.markerId= markerId;
+	public TaskMarkerHandler(final String markerType) {
+		this.markerType= markerType;
 	}
 	
 	
@@ -67,18 +68,18 @@
 		regex.append('(');
 		for (final TaskTag taskTag : taskTags) {
 			regex.append(Pattern.quote(taskTag.getKeyword()));
-			regex.append('|'); 
+			regex.append('|');
 			this.taskTagMap.put(taskTag.getKeyword(), taskTag.getPriority());
 		}
-		regex.setCharAt(regex.length()-1, ')');
+		regex.setCharAt(regex.length() - 1, ')');
 		regex.append("(?:\\z|").append(separatorRegex).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
-		this.taskTagPattern= Pattern.compile(regex.toString());
+ 		this.taskTagPattern= Pattern.compile(regex.toString());
 	}
 	
 	
 	public void setup(final SourceContent sourceContent, final IResource resource) {
-		this.sourceContent= sourceContent;
-		this.resource= resource;
+		this.sourceContent= nonNullAssert(sourceContent);
+		this.resource= nonNullAssert(resource);
 		
 		final Pattern taskTagPattern= this.taskTagPattern;
 		this.taskTagMatcher= (taskTagPattern != null && sourceContent.getStartOffset() == 0) ?
@@ -86,8 +87,8 @@
 				null;
 	}
 	
-	public void addTaskMarker(final String message, final int offset, final int lineNumber, final String match) 
-			throws CoreException {
+	public void addTaskMarker(final String message, final int offset, final int lineNumber,
+			final String match) throws CoreException {
 		final TaskPriority prio= this.taskTagMap.get(match);
 		if (prio == null) {
 			return;
@@ -103,24 +104,34 @@
 		}
 		attributes.put(IMarker.USER_EDITABLE, false);
 		
-		this.resource.createMarker(this.markerId, attributes);
+		this.resource.createMarker(this.markerType, attributes);
 	}
 	
 	public void removeTaskMarkers() throws CoreException {
-		this.resource.deleteMarkers(this.markerId, false, IResource.DEPTH_INFINITE);
+		this.resource.deleteMarkers(this.markerType, false, IResource.DEPTH_INFINITE);
 	}
 	
-	public void checkForTasks(final int startOffset, final int endOffset)
+	public void checkForTasks(final int startOffset, int endOffset)
 			throws CoreException, BadLocationException {
 		final Matcher matcher= this.taskTagMatcher;
 		if (matcher == null) {
 			return;
 		}
 		if (matcher.region(startOffset, endOffset).find()) {
-			final int taskStartOffset= matcher.start(1);
-			final String text= this.sourceContent.getString(taskStartOffset, endOffset);
-			addTaskMarker(text, taskStartOffset,
-					this.sourceContent.getStringLines().getLineOfOffset(taskStartOffset) + 1,
+			final int tagStartOffset= matcher.start(1);
+			final int tagEndOffset= matcher.end(1);
+			while (endOffset > tagEndOffset) {
+				if (this.sourceContent.getChar(endOffset - 1) <= ' ') {
+					endOffset--;
+					continue;
+				}
+				else {
+					break;
+				}
+			}
+			final String text= this.sourceContent.getString(tagStartOffset, endOffset);
+			addTaskMarker(text, tagStartOffset,
+					this.sourceContent.getStringLines().getLineOfOffset(tagStartOffset) + 1,
 					nonNullAssert(matcher.group(1)) );
 		}
 	}