Bug 577558: [*-Model] Add support for SourceContainerElement

Change-Id: I315523dc1211e85cc52470892ca269a4ad3db790
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/ContainerSourceElement.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/ContainerSourceElement.java
index 17c5077..9af2da0 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/ContainerSourceElement.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/ContainerSourceElement.java
@@ -26,8 +26,10 @@
 import org.eclipse.statet.docmlet.tex.core.model.TexSourceElement;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.core.ElementName;
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceContainerElement;
 import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
@@ -87,15 +89,21 @@
 	}
 	
 	
-	public static class SourceContainer extends ContainerSourceElement {
+	public static class SourceContainer extends ContainerSourceElement
+			implements SourceContainerElement<TexSourceElement> {
 		
 		
 		private final SourceUnit sourceUnit;
 		
+		private final SourceModelStamp stamp;
 		
-		public SourceContainer(final int type, final SourceUnit su, final TexAstNode astNode) {
+		
+		public SourceContainer(final int type, final SourceUnit sourceUnit,
+				final SourceModelStamp stamp,
+				final TexAstNode astNode) {
 			super(type, astNode);
-			this.sourceUnit= su;
+			this.sourceUnit= sourceUnit;
+			this.stamp= stamp;
 		}
 		
 		
@@ -119,6 +127,11 @@
 		}
 		
 		@Override
+		public SourceModelStamp getStamp() {
+			return this.stamp;
+		}
+		
+		@Override
 		public boolean exists() {
 			final SourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(TexModel.LTX_TYPE_ID, 0, null);
 			return (modelInfo != null && modelInfo.getSourceElement() == this);
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/SourceAnalyzer.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/SourceAnalyzer.java
index afb3fe7..2b8da7c 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/SourceAnalyzer.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/SourceAnalyzer.java
@@ -92,8 +92,8 @@
 		this.maxSectionLevel= Integer.MIN_VALUE;
 	}
 	
-	public LtxSourceUnitModelInfoImpl createModel(final TexSourceUnit su, final String input,
-			final TexAstInfo ast,
+	public LtxSourceUnitModelInfoImpl createModel(final TexSourceUnit sourceUnit,
+			final String input, final TexAstInfo ast,
 			Map<String, TexCommand> customCommands, Map<String, TexCommand> customEnvs) {
 		clear();
 		this.input= input;
@@ -101,7 +101,8 @@
 			return null;
 		}
 		final TexSourceElement root= this.currentElement= new ContainerSourceElement.SourceContainer(
-				TexElement.C12_SOURCE_FILE, su, (TexAstNode) ast.getRoot());
+				TexElement.C12_SOURCE_FILE, sourceUnit, ast.getStamp(),
+				(TexAstNode)ast.getRoot() );
 		try {
 			((TexAstNode)ast.getRoot()).acceptInTex(this);
 			
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/ContainerSourceElement.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/ContainerSourceElement.java
index 5c7f92a..3fcff2a 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/ContainerSourceElement.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/ContainerSourceElement.java
@@ -26,8 +26,10 @@
 import org.eclipse.statet.docmlet.wikitext.core.model.WikitextSourceElement;
 import org.eclipse.statet.ltk.ast.core.AstNode;
 import org.eclipse.statet.ltk.core.ElementName;
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceContainerElement;
 import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
@@ -87,15 +89,21 @@
 	}
 	
 	
-	public static class SourceContainer extends ContainerSourceElement {
+	public static class SourceContainer extends ContainerSourceElement
+			implements SourceContainerElement<WikitextSourceElement> {
 		
 		
 		private final SourceUnit sourceUnit;
 		
+		private final SourceModelStamp stamp;
 		
-		public SourceContainer(final int type, final SourceUnit su, final WikitextAstNode astNode) {
+		
+		public SourceContainer(final int type, final SourceUnit sourceUnit,
+				final SourceModelStamp stamp,
+				final WikitextAstNode astNode) {
 			super(type, astNode);
-			this.sourceUnit= su;
+			this.sourceUnit= sourceUnit;
+			this.stamp= stamp;
 		}
 		
 		
@@ -119,6 +127,11 @@
 		}
 		
 		@Override
+		public SourceModelStamp getStamp() {
+			return this.stamp;
+		}
+		
+		@Override
 		public boolean exists() {
 			final SourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(WikitextModel.WIKIDOC_TYPE_ID, 0, null);
 			return (modelInfo != null && modelInfo.getSourceElement() == this);
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/SourceAnalyzer.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/SourceAnalyzer.java
index e0351c4..b8b827f 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/SourceAnalyzer.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/SourceAnalyzer.java
@@ -86,8 +86,8 @@
 		this.maxSectionLevel= Integer.MIN_VALUE;
 	}
 	
-	public WikidocSourceUnitModelInfoImpl createModel(final WikitextSourceUnit su, final String input,
-			final AstInfo ast) {
+	public WikidocSourceUnitModelInfoImpl createModel(final WikitextSourceUnit sourceUnit,
+			final String input, final AstInfo ast) {
 		clear();
 		this.input= input;
 		if (!(ast.getRoot() instanceof WikitextAstNode)) {
@@ -101,7 +101,8 @@
 			this.linkDefLabels.clear();
 		}
 		final WikitextSourceElement root= this.currentElement= new ContainerSourceElement.SourceContainer(
-				WikitextSourceElement.C12_SOURCE_FILE, su, (WikitextAstNode) ast.getRoot());
+				WikitextSourceElement.C12_SOURCE_FILE, sourceUnit, ast.getStamp(),
+				(WikitextAstNode)ast.getRoot() );
 		try {
 			((WikitextAstNode) ast.getRoot()).acceptInWikitext(this);
 			
diff --git a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/CompositeSourceElement.java b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/CompositeSourceElement.java
index e3f6add..9f0d439 100644
--- a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/CompositeSourceElement.java
+++ b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/CompositeSourceElement.java
@@ -24,6 +24,7 @@
 import org.eclipse.statet.jcommons.lang.Nullable;
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
 import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
@@ -44,9 +45,10 @@
 	
 	
 	public CompositeSourceElement(final SourceUnit sourceUnit,
+			final SourceModelStamp stamp,
 			final List<? extends YamlSourceElement> elements,
 			final TextRegion sourceRange) {
-		super(sourceUnit, null);
+		super(sourceUnit, stamp, null);
 		
 		this.compositeElements= ImCollections.toList(elements);
 		this.sourceRange= sourceRange;
diff --git a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/ContainerSourceElement.java b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/ContainerSourceElement.java
index 95765d6..0183151 100644
--- a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/ContainerSourceElement.java
+++ b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/ContainerSourceElement.java
@@ -22,9 +22,11 @@
 import org.eclipse.statet.jcommons.text.core.TextRegion;
 
 import org.eclipse.statet.ltk.core.ElementName;
+import org.eclipse.statet.ltk.core.source.SourceModelStamp;
 import org.eclipse.statet.ltk.model.core.LtkModelUtils;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElement;
 import org.eclipse.statet.ltk.model.core.element.LtkModelElementFilter;
+import org.eclipse.statet.ltk.model.core.element.SourceContainerElement;
 import org.eclipse.statet.ltk.model.core.element.SourceStructElement;
 import org.eclipse.statet.ltk.model.core.element.SourceUnit;
 import org.eclipse.statet.ltk.model.core.element.SourceUnitModelInfo;
@@ -76,15 +78,21 @@
 	}
 	
 	
-	public static class SourceContainer extends ContainerSourceElement {
+	public static class SourceContainer extends ContainerSourceElement
+			implements SourceContainerElement<YamlSourceElement> {
 		
 		
 		private final SourceUnit sourceUnit;
 		
+		private final SourceModelStamp stamp;
 		
-		public SourceContainer(final SourceUnit sourceUnit, final YamlAstNode astNode) {
+		
+		public SourceContainer(final SourceUnit sourceUnit,
+				final SourceModelStamp stamp,
+				final YamlAstNode astNode) {
 			super(astNode);
 			this.sourceUnit= sourceUnit;
+			this.stamp= stamp;
 			
 			final ElementName elementName= sourceUnit.getElementName();
 			this.name= (elementName instanceof YamlElementName) ?
@@ -109,6 +117,11 @@
 		}
 		
 		@Override
+		public SourceModelStamp getStamp() {
+			return this.stamp;
+		}
+		
+		@Override
 		public boolean exists() {
 			final SourceUnitModelInfo modelInfo= getSourceUnit().getModelInfo(YamlModel.YAML_TYPE_ID, 0, null);
 			return (modelInfo != null && modelInfo.getSourceElement() == this);
diff --git a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/SourceAnalyzer.java b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/SourceAnalyzer.java
index e212446..1e9b2c2 100644
--- a/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/SourceAnalyzer.java
+++ b/yaml/org.eclipse.statet.yaml.core/src/org/eclipse/statet/internal/yaml/core/model/SourceAnalyzer.java
@@ -66,7 +66,8 @@
 			
 			final var rootNode= (SourceComponent)ast.getRoot();
 			final var element= new ContainerSourceElement.SourceContainer(
-					sourceUnit, rootNode );
+					this.sourceUnit, ast.getStamp(),
+					rootNode );
 			processSourceLines(element, rootNode);
 			
 			final YamlSourceUnitModelInfoImpl modelInfo= new YamlSourceUnitModelInfoImpl(ast, element);
@@ -100,7 +101,8 @@
 	public YamlSourceUnitModelInfo stopChunkSession() {
 		final var chunkElements= nonNullAssert(this.chunkElements);
 		try {
-			final var compositeElement= new CompositeSourceElement(this.sourceUnit,
+			final var compositeElement= new CompositeSourceElement(
+					this.sourceUnit, this.ast.getStamp(),
 					chunkElements, this.ast.getRoot() );
 			return new YamlSourceUnitModelInfoImpl(this.ast, compositeElement);
 		}