Bug 575365: [Model] Add SourceUnitIssueSupport for easier implementation
of source units

Change-Id: Ic933ad4993aa54e61f99cb44ad35fb7187562224
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
index 915c809..0f4ecea 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/internal/ltk/core/SourceUnitManagerImpl.java
@@ -46,6 +46,7 @@
 
 import org.eclipse.statet.ltk.core.IExtContentTypeManager;
 import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.model.core.ModelTypeDescriptor;
 import org.eclipse.statet.ltk.model.core.SourceUnitFactory;
@@ -194,7 +195,7 @@
 						}
 					}
 					catch (final Exception e) {
-						LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+						LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 								"Error loading working context contributions", e )); //$NON-NLS-1$
 					}
 				}
@@ -513,7 +514,7 @@
 			}
 		}
 		catch (final CoreException | IOException | UnsupportedOperationException e) {
-			LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+			LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 					"An error occurred when trying to detect content type of " + from,
 					e ));
 			return null;
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
index 11faeeb..7be6e6d 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/Ltk.java
@@ -23,9 +23,6 @@
 public class Ltk {
 	
 	
-	public static final String BUNDLE_ID= "org.eclipse.statet.ltk.core"; //$NON-NLS-1$
-	
-	
 	public static final WorkingContext PERSISTENCE_CONTEXT= new WorkingContext("persistence.default"); //$NON-NLS-1$
 	
 	public static final WorkingContext EDITOR_CONTEXT= new WorkingContext("editor.default"); //$NON-NLS-1$
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java
new file mode 100644
index 0000000..014c722
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/core/LtkCore.java
@@ -0,0 +1,33 @@
+/*=============================================================================#
+ # 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.core;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+
+@NonNullByDefault
+public class LtkCore {
+	
+	
+	public static final String BUNDLE_ID= "org.eclipse.statet.ltk.core"; //$NON-NLS-1$
+	
+	
+	public static final int NA_OFFSET= Integer.MIN_VALUE;
+	
+	
+	private LtkCore() {
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java
new file mode 100644
index 0000000..753d330
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/build/SourceUnitIssueSupport.java
@@ -0,0 +1,37 @@
+/*=============================================================================#
+ # 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.model.core.build;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+
+
+@NonNullByDefault
+public interface SourceUnitIssueSupport {
+	
+	
+	IssueTypeSet getIssueTypeSet();
+	
+	void clearIssues(SourceUnit sourceUnit) throws CoreException;
+	
+	@Nullable IssueRequestor createIssueRequestor(SourceUnit sourceUnit);
+	
+}
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 7f00f13..bff9b7f 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
@@ -16,7 +16,6 @@
 
 import java.util.concurrent.CancellationException;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.statet.jcommons.lang.NonNullByDefault;
@@ -26,9 +25,6 @@
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.core.source.SourceContent;
-import org.eclipse.statet.ltk.issues.core.IssueRequestor;
-import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
-import org.eclipse.statet.ltk.issues.core.impl.ResourceMarkerIssueRequestor;
 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;
@@ -39,18 +35,19 @@
 public abstract class SourceUnitModelContainer<TSourceUnit extends SourceUnit, TModelInfo extends SourceUnitModelInfo> {
 	
 	
-	private final @Nullable WorkingContext mode;
-	
 	private final TSourceUnit unit;
 	
 	private @Nullable AstInfo astInfo;
 	
 	private @Nullable TModelInfo modelInfo;
+
+	private final @Nullable SourceUnitIssueSupport issueSupport;
 	
 	
-	public SourceUnitModelContainer(final TSourceUnit unit) {
+	public SourceUnitModelContainer(final TSourceUnit unit,
+			final @Nullable SourceUnitIssueSupport issueSupport) {
 		this.unit= unit;
-		this.mode= getMode(unit);
+		this.issueSupport= issueSupport;
 	}
 	
 	
@@ -58,10 +55,6 @@
 	
 	public abstract boolean isContainerFor(String modelTypeId);
 	
-	public @Nullable IssueTypeSet getIssueTypeSet() {
-		return null;
-	}
-	
 	
 	protected @Nullable WorkingContext getMode(final TSourceUnit su) {
 		if (su instanceof WorkspaceSourceUnit) {
@@ -70,10 +63,6 @@
 		return null;
 	}
 	
-	protected final @Nullable WorkingContext getMode() {
-		return this.mode;
-	}
-	
 	
 	public TSourceUnit getSourceUnit() {
 		return this.unit;
@@ -121,7 +110,7 @@
 	}
 	
 	public @Nullable AstInfo getCurrentAst() {
-		if (this.mode == Ltk.PERSISTENCE_CONTEXT) {
+		if (this.unit.getWorkingContext() == Ltk.PERSISTENCE_CONTEXT) {
 			final @Nullable TModelInfo model= getCurrentModel();
 			if (model != null) {
 				return model.getAst();
@@ -132,7 +121,7 @@
 	}
 	
 	public void setAst(final AstInfo ast) {
-		if (this.mode == Ltk.PERSISTENCE_CONTEXT) {
+		if (this.unit.getWorkingContext() == Ltk.PERSISTENCE_CONTEXT) {
 			return;
 		}
 		this.astInfo= ast;
@@ -153,25 +142,8 @@
 	}
 	
 	
-	public void clearIssues() throws CoreException {
-		final var mode= getMode();
-		if (mode == Ltk.PERSISTENCE_CONTEXT) {
-			final IssueTypeSet issueTypeSet= getIssueTypeSet();
-			if (issueTypeSet != null) {
-				ResourceMarkerIssueRequestor.clear(getSourceUnit().getResource(), issueTypeSet);
-			}
-		}
-	}
-	
-	public @Nullable IssueRequestor createIssueRequestor() {
-		final var mode= getMode();
-		if (mode == Ltk.PERSISTENCE_CONTEXT) {
-			final IssueTypeSet issueTypeSet= getIssueTypeSet();
-			if (issueTypeSet != null) {
-				return ResourceMarkerIssueRequestor.create(getSourceUnit().getResource(), issueTypeSet);
-			}
-		}
-		return null;
+	public @Nullable SourceUnitIssueSupport getIssueSupport() {
+		return this.issueSupport;
 	}
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
index 8c6e31b..d41bd98 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/AbstractModelEventJob.java
@@ -29,7 +29,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 
 import org.eclipse.statet.internal.ltk.core.LtkCorePlugin;
-import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.core.WorkingContext;
 import org.eclipse.statet.ltk.model.core.ElementChangedEvent;
 import org.eclipse.statet.ltk.model.core.ElementChangedListener;
@@ -144,7 +144,7 @@
 					task.run();
 				}
 				catch (final Throwable e) {
-					LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							String.format("An error occurred when firing model event for %1$s.", //$NON-NLS-1$
 									this.modelManager.getModelTypeId() ),
 							e ));
@@ -177,7 +177,7 @@
 				listener.elementChanged(event);
 			}
 			catch (final Exception | LinkageError | AssertionError e) {
-				LtkCorePlugin.log(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+				LtkCorePlugin.log(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 						String.format("An error occurred while handling a model element change for %1$s.", //$NON-NLS-1$
 								this.modelManager.getModelTypeId() ),
 						e ));
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java
new file mode 100644
index 0000000..aa033bd
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/model/core/impl/ResourceIssueSupport.java
@@ -0,0 +1,56 @@
+/*=============================================================================#
+ # 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.model.core.impl;
+
+import org.eclipse.core.runtime.CoreException;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
+import org.eclipse.statet.ltk.issues.core.impl.ResourceMarkerIssueRequestor;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitIssueSupport;
+import org.eclipse.statet.ltk.model.core.element.SourceUnit;
+
+
+@NonNullByDefault
+public class ResourceIssueSupport implements SourceUnitIssueSupport {
+	
+	
+	private final IssueTypeSet issueTypeSet;
+	
+	
+	public ResourceIssueSupport(final IssueTypeSet issueTypeSet) {
+		this.issueTypeSet= issueTypeSet;
+	}
+	
+	
+	@Override
+	public IssueTypeSet getIssueTypeSet() {
+		return this.issueTypeSet;
+	}
+	
+	@Override
+	public void clearIssues(final SourceUnit sourceUnit) throws CoreException {
+		ResourceMarkerIssueRequestor.clear(sourceUnit.getResource(), getIssueTypeSet());
+	}
+	
+	@Override
+	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit sourceUnit) {
+		return ResourceMarkerIssueRequestor.create(sourceUnit.getResource(), getIssueTypeSet());
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
index 90f3774..23c33b4 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/project/core/builder/ProjectBuildTask.java
@@ -331,7 +331,10 @@
 	
 	protected void clearSourceUnit(final SourceUnitModelContainer<?, ?> adapter) {
 		try {
-			adapter.clearIssues();
+			final var issueSupport= adapter.getIssueSupport();
+			if (issueSupport != null) {
+				issueSupport.clearIssues(adapter.getSourceUnit());
+			}
 		}
 		catch (final CoreException e) {
 			this.status.add(new Status(IStatus.ERROR, getBuilderDefinition().getBundleId(),
diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
index 42e1b61..0ddf73a 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/refactoring/core/RefactoringAdapter.java
@@ -79,6 +79,7 @@
 
 import org.eclipse.statet.internal.ltk.refactoring.core.Messages;
 import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.model.core.ElementSet;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
@@ -973,11 +974,11 @@
 	
 	
 	protected IStatus failDocAnalyzation(final Throwable e) {
-		return new Status(IStatus.ERROR, Ltk.BUNDLE_ID, Messages.Common_error_AnalyzingSourceDocument_message, e);
+		return new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, Messages.Common_error_AnalyzingSourceDocument_message, e);
 	}
 	
 	protected IStatus failCreation(final Throwable e) {
-		return new Status(IStatus.ERROR, Ltk.BUNDLE_ID, Messages.Common_error_CreatingElementChange_message, e);
+		return new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, Messages.Common_error_CreatingElementChange_message, e);
 	}
 	
 }
diff --git a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
index 450d151..a94c2a6 100644
--- a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
+++ b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
@@ -53,6 +53,7 @@
  org.eclipse.statet.ecommons.workbench.search.ui,
  org.eclipse.statet.ecommons.workbench.ui,
  org.eclipse.statet.ecommons.workbench.ui.util,
+ org.eclipse.statet.ltk.model.ui.impl,
  org.eclipse.statet.ltk.ui,
  org.eclipse.statet.ltk.ui.compare,
  org.eclipse.statet.ltk.ui.input,
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
similarity index 98%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
index 81a21f5..44ad2e7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/FileBufferWorkingBuffer.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/FileBufferWorkingBuffer.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.ui;
+package org.eclipse.statet.ltk.model.ui.impl;
 
 import static org.eclipse.statet.ltk.ui.LtkUI.BUNDLE_ID;
 
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
similarity index 98%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
index c571d88..77eaef9 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/model/ui/impl/GenericEditorWorkspaceSourceUnitWorkingCopy2.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.ui;
+package org.eclipse.statet.ltk.model.ui.impl;
 
 import java.lang.reflect.InvocationTargetException;
 
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 609a06c..6e663c3 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
@@ -36,16 +36,18 @@
 
 import org.eclipse.statet.ltk.core.Ltk;
 import org.eclipse.statet.ltk.issues.core.IssueRequestor;
+import org.eclipse.statet.ltk.issues.core.IssueTypeSet;
 import org.eclipse.statet.ltk.model.core.DocumentModelProvider;
 import org.eclipse.statet.ltk.model.core.LtkModels;
 import org.eclipse.statet.ltk.model.core.SourceUnitManager;
+import org.eclipse.statet.ltk.model.core.build.SourceUnitIssueSupport;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
 
 
 @NonNullByDefault
 public class SourceDocumentProvider<T extends SourceUnit> extends TextFileDocumentProvider
-		implements DocumentModelProvider {
+		implements DocumentModelProvider, SourceUnitIssueSupport {
 	
 	
 	public static class SourceFileInfo extends FileInfo {
@@ -58,14 +60,18 @@
 	private final String modelTypeId;
 	private final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant;
 	
+	private final IssueTypeSet issueTypeSet;
+	
 	
 	public SourceDocumentProvider(final String modelTypeId,
-			final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant) {
+			final @Nullable PartitionerDocumentSetupParticipant documentSetupParticipant,
+			final IssueTypeSet issueTypeSet) {
 		this.modelTypeId= nonNullAssert(modelTypeId);
 		this.documentSetupParticipant= documentSetupParticipant;
 //		final IDocumentProvider provider= new ForwardingDocumentProvider(documentSetupParticipant.getPartitioningId(),
 //				this.documentSetupParticipant, new TextFileDocumentProvider());
 //		setParentDocumentProvider(provider);
+		this.issueTypeSet= issueTypeSet;
 	}
 	
 	
@@ -165,8 +171,19 @@
 		return super.getAnnotationModel(element);
 	}
 	
-	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit element) {
-		final IAnnotationModel annotationModel= getAnnotationModel(element);
+	
+	@Override
+	public IssueTypeSet getIssueTypeSet() {
+		return this.issueTypeSet;
+	}
+	
+	@Override
+	public void clearIssues(final SourceUnit sourceUnit) throws CoreException {
+	}
+	
+	@Override
+	public @Nullable IssueRequestor createIssueRequestor(final SourceUnit sourceUnit) {
+		final IAnnotationModel annotationModel= getAnnotationModel(sourceUnit);
 		if (annotationModel instanceof SourceAnnotationModel) {
 			return ((SourceAnnotationModel)annotationModel).createIssueRequestor();
 		}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
index 1acad62..00e9fcc 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/ContentAssistProcessor.java
@@ -50,7 +50,7 @@
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
 import org.eclipse.statet.internal.ltk.ui.EditingMessages;
-import org.eclipse.statet.ltk.core.Ltk;
+import org.eclipse.statet.ltk.core.LtkCore;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
 
 
@@ -367,7 +367,7 @@
 					computer.computeCompletionProposals(context, mode, proposals, m1);
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							"An error occurred when computing content assistant completion proposals.",
 							e ));
 				}
@@ -492,7 +492,7 @@
 					computer.computeInformationProposals(context, proposals, m1);
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID,
 							"An error occurred when computing content assistant context information.",
 							e ));
 				}
@@ -751,7 +751,7 @@
 					computer.onSessionEnded();
 				}
 				catch (final Exception e) {
-					StatusManager.getManager().handle(new Status(IStatus.ERROR, Ltk.BUNDLE_ID, 0,
+					StatusManager.getManager().handle(new Status(IStatus.ERROR, LtkCore.BUNDLE_ID, 0,
 							"Error by contributed content assist computer.", e ));
 				}
 			}