Bug 575365: [Ltk-Issues] Add Issue as common basis for tasks and
problems
  - Add Issue and impl BasicSourceIssue
  - Add Task and impl BasicTask
  - Expand ProblemRequestor to IssueRequestor

Change-Id: I46fee91cd16bede19c3793c0574c50b84bde5d98
diff --git a/ltk/org.eclipse.statet.ltk.core/META-INF/MANIFEST.MF b/ltk/org.eclipse.statet.ltk.core/META-INF/MANIFEST.MF
index d468e3f..64760c4 100644
--- a/ltk/org.eclipse.statet.ltk.core/META-INF/MANIFEST.MF
+++ b/ltk/org.eclipse.statet.ltk.core/META-INF/MANIFEST.MF
@@ -23,6 +23,7 @@
  org.eclipse.statet.ecommons.io,
  org.eclipse.statet.jcommons.collections;version="4.5.0",
  org.eclipse.statet.jcommons.lang;version="4.5.0",
+ org.eclipse.statet.jcommons.status;version="4.5.0",
  org.eclipse.statet.jcommons.string;version="4.5.0",
  org.eclipse.statet.jcommons.text.core;version="4.5.0",
  org.eclipse.statet.jcommons.text.core.util;version="4.5.0"
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issue.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issue.java
new file mode 100644
index 0000000..cb572da
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issue.java
@@ -0,0 +1,30 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.issues.core;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public interface Issue {
+	
+	
+	int getSourceLine();
+	int getSourceStartOffset();
+	int getSourceEndOffset();
+	
+	String getMessage();
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueMarkers.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueMarkers.java
new file mode 100644
index 0000000..547bbee
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueMarkers.java
@@ -0,0 +1,59 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.issues.core;
+
+import org.eclipse.core.resources.IMarker;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+/**
+ * Resource marker support for issues.
+ */
+@NonNullByDefault
+public class IssueMarkers {
+	
+	
+	/**
+	 * Attribute name for the id of the (problem) category.
+	 */
+	public static final String CATEGORY_ID_ATTR_NAME= "categoryId"; //$NON-NLS-1$
+	
+	/**
+	 * Attribute name for the (problem) code.
+	 */
+	public static final String CODE_ATTR_NAME= "code"; //$NON-NLS-1$
+	
+	
+	public static final int toMarkerPriority(final TaskPriority priority) {
+		switch (priority) {
+		case HIGH:
+			return IMarker.PRIORITY_HIGH;
+		case LOW:
+			return IMarker.PRIORITY_LOW;
+		default:
+			return IMarker.PRIORITY_NORMAL;
+		}
+	}
+	
+	public static final int toMarkerSeverity(final int problemSeverity) {
+		return problemSeverity;
+	}
+	
+	
+	private IssueMarkers() {
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/ProblemRequestor.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueRequestor.java
similarity index 76%
rename from ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/ProblemRequestor.java
rename to ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueRequestor.java
index 810f023..b52bd78 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/ProblemRequestor.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/IssueRequestor.java
@@ -17,17 +17,18 @@
 import java.util.List;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.status.StatusException;
 
-import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitModelContainer;
 
 
 /**
  * Accept problems by a problem checker.
  * 
- * {@link SourceUnit#getProblemRequestor()}
+ * {@link SourceUnitModelContainer#createIssueRequestor()}
  */
 @NonNullByDefault
-public interface ProblemRequestor {
+public interface IssueRequestor {
 	
 	
 	/**
@@ -45,6 +46,13 @@
 	 */
 	void acceptProblems(String categoryId, List<Problem> problems);
 	
-	void finish();
+	/**
+	 * Notification of a discovered task.
+	 * 
+	 * @param task the task.
+	 */
+	void acceptTask(Task task);
+	
+	void finish() throws StatusException;
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Tasks.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
similarity index 86%
rename from ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Tasks.java
rename to ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
index c7386e3..45551e0 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Tasks.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Issues.java
@@ -29,19 +29,19 @@
 
 
 @NonNullByDefault
-public class Tasks {
+public final class Issues {
 	
 	
-	public static final String KEYWORD_PREF_KEY= "TaskTags.keyword"; //$NON-NLS-1$
-	public static final String PRIORITY_PREF_KEY= "TaskTags.priority"; //$NON-NLS-1$
+	public static final String TASK_TAG_KEYWORD_PREF_KEY= "TaskTags.keyword"; //$NON-NLS-1$
+	public static final String TASK_TAG_PRIORITY_PREF_KEY= "TaskTags.priority"; //$NON-NLS-1$
 	
 	
 	private static StringArrayPref createKeywordPref(final String qualifier) {
-		return new StringArrayPref(qualifier, KEYWORD_PREF_KEY);
+		return new StringArrayPref(qualifier, TASK_TAG_KEYWORD_PREF_KEY);
 	}
 	
 	private static EnumListPref<TaskPriority> createPriorityPref(final String qualifier) {
-		return new EnumListPref<>(qualifier, PRIORITY_PREF_KEY, TaskPriority.class);
+		return new EnumListPref<>(qualifier, TASK_TAG_PRIORITY_PREF_KEY, TaskPriority.class);
 	}
 	
 	
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Problem.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Problem.java
index 56e4c3f..bac3e97 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Problem.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Problem.java
@@ -20,42 +20,37 @@
 
 
 /**
- * BasicProblem
+ * Problem
  */
 @NonNullByDefault
-public interface Problem {
+public interface Problem extends Issue {
 	
 	
-	/** 
+	/**
 	 * Error severity constant indicating an error.
 	 * 
 	 * {@link IMarker#SEVERITY_ERROR}
 	 */
-	int SEVERITY_ERROR= 2;
+	static final int SEVERITY_ERROR= 2;
 	
-	/** 
+	/**
 	 * Error severity constant indicating a warning.
 	 * 
 	 * {@link IMarker#SEVERITY_WARNING}
 	 */
-	int SEVERITY_WARNING= 1;
+	static final int SEVERITY_WARNING= 1;
 	
-	/** 
+	/**
 	 * Error severity constant indicating an information only.
 	 * 
 	 * {@link IMarker#SEVERITY_INFO}
 	 */
-	int SEVERITY_INFO= 0;
+	static final int SEVERITY_INFO= 0;
 	
 	
 	String getCategoryId();
 	
-	int getSourceLine();
-	int getSourceStartOffset();
-	int getSourceEndOffset();
-	
 	int getSeverity();
 	int getCode();
-	String getMessage();
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Task.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Task.java
new file mode 100644
index 0000000..d72fb5c
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/Task.java
@@ -0,0 +1,29 @@
+/*=============================================================================#
+ # Copyright (c) 2008, 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.issues.core;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+/**
+ * Task
+ */
+@NonNullByDefault
+public interface Task extends Issue {
+	
+	
+	TaskPriority getPriority();
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/TaskPriority.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/TaskPriority.java
index 525e987..5618292 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/TaskPriority.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/TaskPriority.java
@@ -14,8 +14,6 @@
 
 package org.eclipse.statet.ltk.issues.core;
 
-import org.eclipse.core.resources.IMarker;
-
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
 
@@ -23,21 +21,13 @@
 public enum TaskPriority {
 	
 	
-	HIGH (IMarker.PRIORITY_HIGH), 
-	NORMAL (IMarker.PRIORITY_NORMAL), 
-	LOW (IMarker.PRIORITY_LOW);
+	HIGH,
+	NORMAL,
+	LOW;
 	
 	
-	private int priority;
-	
-	
-	TaskPriority(final int priority) {
-		this.priority= priority;
+	TaskPriority() {
 	}
 	
 	
-	public int getMarkerPriority() {
-		return this.priority;
-	}
-	
 }
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/BasicProblem.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicProblem.java
similarity index 60%
rename from ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/BasicProblem.java
rename to ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicProblem.java
index ba622e5..6d0becd 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/BasicProblem.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicProblem.java
@@ -12,73 +12,51 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.issues.core;
+package org.eclipse.statet.ltk.issues.core.impl;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 
+import org.eclipse.statet.ltk.issues.core.Problem;
+
 
 /**
- * BasicProblem in a source unit. Default implementation of {@link Problem}.
+ * Default implementation of {@link Problem}.
  */
 @NonNullByDefault
-public class BasicProblem implements Problem {
+public class BasicProblem extends BasicSourceIssue implements Problem {
 	
 	
-	private final int line;
-	private final int startOffset;
-	private final int endOffset;
+	private final String categoryId;
 	
-	private final String modelTypeId;
 	private final int severity;
 	private final int code;
 	private final String message;
 	
 	
-	public BasicProblem(final String modelTypeId,
+	public BasicProblem(final String categoryId,
 			final int severity, final int code, final String message,
 			final int line, final int startOffset, final int endOffset) {
-		this.modelTypeId= modelTypeId;
+		super(line, startOffset, endOffset);
+		this.categoryId= categoryId;
 		this.severity= severity;
 		this.code= code;
 		this.message= message;
-		
-		this.line= line;
-		this.startOffset= startOffset;
-		this.endOffset= (endOffset - startOffset > 0) ? endOffset : startOffset + 1;
 	}
 	
-	public BasicProblem(final String modelTypeId,
+	public BasicProblem(final String categoryId,
 			final int severity, final int code, final String message,
 			final int startOffset, final int endOffset) {
-		this.modelTypeId= modelTypeId;
+		super(-1, startOffset, endOffset);
+		this.categoryId= categoryId;
 		this.severity= severity;
 		this.code= code;
 		this.message= message;
-		
-		this.line= -1;
-		this.startOffset= startOffset;
-		this.endOffset= (endOffset - startOffset > 0) ? endOffset : startOffset + 1;
 	}
 	
 	
 	@Override
 	public String getCategoryId() {
-		return this.modelTypeId;
-	}
-	
-	@Override
-	public int getSourceLine() {
-		return this.line;
-	}
-	
-	@Override
-	public int getSourceStartOffset() {
-		return this.startOffset;
-	}
-	
-	@Override
-	public int getSourceEndOffset() {
-		return this.endOffset;
+		return this.categoryId;
 	}
 	
 	@Override
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicSourceIssue.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicSourceIssue.java
new file mode 100644
index 0000000..e1c49f1
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicSourceIssue.java
@@ -0,0 +1,54 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.issues.core.impl;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.issues.core.Issue;
+
+
+@NonNullByDefault
+public abstract class BasicSourceIssue implements Issue {
+	
+	
+	private final int line;
+	private final int startOffset;
+	private final int endOffset;
+	
+	
+	public BasicSourceIssue(final int line, final int startOffset, final int endOffset) {
+		this.line= line;
+		this.startOffset= startOffset;
+		this.endOffset= (endOffset - startOffset > 0) ? endOffset : startOffset + 1;
+	}
+	
+	
+	@Override
+	public int getSourceLine() {
+		return this.line;
+	}
+	
+	@Override
+	public int getSourceStartOffset() {
+		return this.startOffset;
+	}
+	
+	@Override
+	public int getSourceEndOffset() {
+		return this.endOffset;
+	}
+	
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicTask.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicTask.java
new file mode 100644
index 0000000..53daa2e
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/BasicTask.java
@@ -0,0 +1,53 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.issues.core.impl;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.issues.core.Task;
+import org.eclipse.statet.ltk.issues.core.TaskPriority;
+
+
+/**
+ * Default implementation of {@link Task}.
+ */
+@NonNullByDefault
+public class BasicTask extends BasicSourceIssue implements Task {
+	
+	
+	private final TaskPriority priority;
+	
+	private final String message;
+	
+	
+	public BasicTask(final TaskPriority priority, final String message,
+			final int line, final int startOffset, final int endOffset) {
+		super(line, startOffset, endOffset);
+		this.priority= priority;
+		this.message= message;
+	}
+	
+	
+	@Override
+	public TaskPriority getPriority() {
+		return this.priority;
+	}
+	
+	@Override
+	public String getMessage() {
+		return this.message;
+	}
+	
+}
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 ab6cefe..7ac96b9 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
@@ -32,6 +32,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.issues.core.IssueMarkers;
 import org.eclipse.statet.ltk.issues.core.TaskPriority;
 import org.eclipse.statet.ltk.issues.core.TaskTag;
 
@@ -96,7 +97,7 @@
 		
 		final var attributes= new HashMap<String, Object>();
 		attributes.put(IMarker.MESSAGE, message);
-		attributes.put(IMarker.PRIORITY, prio.getMarkerPriority());
+		attributes.put(IMarker.PRIORITY, IssueMarkers.toMarkerPriority(prio));
 		attributes.put(IMarker.LINE_NUMBER, (lineNumber > 0) ? lineNumber : 1);
 		if (offset != -1) {
 			attributes.put(IMarker.CHAR_START, offset);
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
index 519ab67..60016fc 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitModelContainer.java
@@ -25,7 +25,7 @@
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.SourceContent;
 import org.eclipse.statet.ltk.core.WorkingContext;
-import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
@@ -146,7 +146,7 @@
 	}
 	
 	
-	public @Nullable ProblemRequestor createProblemRequestor() {
+	public @Nullable IssueRequestor createIssueRequestor() {
 		return null;
 	}
 	
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceAnnotationModel.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceAnnotationModel.java
index b51fea5..0b6951a 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceAnnotationModel.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceAnnotationModel.java
@@ -27,8 +27,10 @@
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
 import org.eclipse.statet.jcommons.lang.Nullable;
 
+import org.eclipse.statet.ltk.issues.core.Issue;
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
 import org.eclipse.statet.ltk.issues.core.Problem;
-import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
+import org.eclipse.statet.ltk.issues.core.Task;
 
 
 /**
@@ -39,7 +41,7 @@
 public abstract class SourceAnnotationModel extends ResourceMarkerAnnotationModel {
 	
 	
-	protected class SourceAnnotationProblemRequestor implements ProblemRequestor {
+	protected class SourceAnnotationIssueRequestor implements IssueRequestor {
 		
 		
 		protected final List<Problem> reportedProblems= new ArrayList<>();
@@ -49,7 +51,7 @@
 		private int state= 1;
 		
 		
-		public SourceAnnotationProblemRequestor() {
+		public SourceAnnotationIssueRequestor() {
 			this.handleTemporaryProblems= isHandlingTemporaryProblems();
 		}
 		
@@ -69,6 +71,10 @@
 		}
 		
 		@Override
+		public void acceptTask(final Task task) {
+		}
+		
+		@Override
 		public void finish() {
 			if (this.state < 0) {
 				throw new IllegalStateException("Already finished");
@@ -106,13 +112,13 @@
 //		return new CompilationUnitAnnotationModelEvent(this, getResource());
 //	}
 	
-	public final ProblemRequestor createProblemRequestor() {
+	public final IssueRequestor createIssueRequestor() {
 		this.reportingCounter.incrementAndGet();
-		return doCreateProblemRequestor();
+		return doCreateIssueRequestor();
 	}
 	
-	protected ProblemRequestor doCreateProblemRequestor() {
-		return new SourceAnnotationProblemRequestor();
+	protected IssueRequestor doCreateIssueRequestor() {
+		return new SourceAnnotationIssueRequestor();
 	}
 	
 	public void clearProblems(final @Nullable String category) {
@@ -144,7 +150,7 @@
 	}
 	
 	private void reportProblems(final List<Problem> reportedProblems) {
-		boolean reportedProblemsChanged= false;
+		boolean reportedIssuesChanged= false;
 		
 		synchronized (getLockObject()) {
 			if (this.reportingCounter.decrementAndGet() != 0) {
@@ -154,7 +160,7 @@
 //			this.currentlyOverlaid= new ArrayList();
 			
 			if (this.problemAnnotations.size() > 0) {
-				reportedProblemsChanged= true;
+				reportedIssuesChanged= true;
 				removeAnnotations(this.problemAnnotations, false, true);
 				this.problemAnnotations.clear();
 			}
@@ -169,7 +175,7 @@
 							if (annotation != null) {
 								addAnnotation(annotation, position, false);
 								this.problemAnnotations.add(annotation);
-								reportedProblemsChanged= true;
+								reportedIssuesChanged= true;
 							}
 						} catch (final BadLocationException x) {
 							// ignore invalid position
@@ -182,7 +188,7 @@
 //			this.previouslyOverlaid= null;
 		}
 		
-		if (reportedProblemsChanged) {
+		if (reportedIssuesChanged) {
 			fireModelChanged();
 		}
 	}
@@ -222,9 +228,9 @@
 //		}
 //	}
 	
-	protected Position createPosition(final Problem problem) {
-		final int start= problem.getSourceStartOffset();
-		final int end= problem.getSourceEndOffset();
+	protected Position createPosition(final Issue issue) {
+		final int start= issue.getSourceStartOffset();
+		final int end= issue.getSourceEndOffset();
 		if (start < 0 && end < 0) {
 			assert (start >= 0 && end >= 0);
 		}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
index 5476856..609a06c 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceDocumentProvider.java
@@ -35,7 +35,7 @@
 import org.eclipse.statet.ecommons.text.PartitionerDocumentSetupParticipant;
 
 import org.eclipse.statet.ltk.core.Ltk;
-import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
 import org.eclipse.statet.ltk.model.core.DocumentModelProvider;
 import org.eclipse.statet.ltk.model.core.LtkModels;
 import org.eclipse.statet.ltk.model.core.SourceUnitManager;
@@ -165,10 +165,10 @@
 		return super.getAnnotationModel(element);
 	}
 	
-	public @Nullable ProblemRequestor createProblemRequestor(final SourceUnit element) {
+	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit element) {
 		final IAnnotationModel annotationModel= getAnnotationModel(element);
 		if (annotationModel instanceof SourceAnnotationModel) {
-			return ((SourceAnnotationModel) annotationModel).createProblemRequestor();
+			return ((SourceAnnotationModel)annotationModel).createIssueRequestor();
 		}
 		return null;
 	}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceProblemAnnotation.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceProblemAnnotation.java
index 528a4db..49a595a 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceProblemAnnotation.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SourceProblemAnnotation.java
@@ -33,9 +33,10 @@
 
 
 /**
- * Annotation representing an <code>Problem</code>.
+ * Annotation representing an {@link Problem}.
  */
-public class SourceProblemAnnotation extends Annotation implements IAnnotationPresentation, IQuickFixableAnnotation {
+public class SourceProblemAnnotation extends Annotation
+		implements IAnnotationPresentation, IQuickFixableAnnotation {
 	
 	public static final String TASK_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.task"; //$NON-NLS-1$
 	public static final String SPELLING_ANNOTATION_TYPE= "org.eclipse.ui.workbench.texteditor.spelling"; //$NON-NLS-1$
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
index bc132d2..d6686aa 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/presentation/CommentScanner.java
@@ -34,7 +34,7 @@
 import org.eclipse.statet.ecommons.text.ui.presentation.TextStyleManager;
 import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
 
-import org.eclipse.statet.ltk.issues.core.Tasks;
+import org.eclipse.statet.ltk.issues.core.Issues;
 
 
 /**
@@ -131,8 +131,8 @@
 	}
 	
 	private void loadTaskTags() {
-		final var taskTags= Tasks.loadTaskTags(this.prefQualifier, this.prefs);
-		this.taskTagRule.setKeywords(Tasks.getKeywords(taskTags));
+		final var taskTags= Issues.loadTaskTags(this.prefQualifier, this.prefs);
+		this.taskTagRule.setKeywords(Issues.getKeywords(taskTags));
 	}
 	
 }