Bug 572429: [*-Model] Add support for source configuration for embedded
chunks to reconcilers and SourceModelStamp
Change-Id: Iad3f1ace5fd19232b6e27418edf5e00b0bba9884
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
index eddfadb..42dd3ac 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/docmlet/tex/core/model/build/LtxSourceUnitModelContainerEmbeddedExtension.java
@@ -32,7 +32,10 @@
String getNowebType();
+ Object getSourceConfig();
+
void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
+ final Object sourceConfig,
final int level, final IProgressMonitor monitor);
void reconcileEmbeddedModel(final SourceContent content, final LtxSourceUnitModelInfo texModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
index b0308fa..6c96a3d 100644
--- a/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.tex.core/src/org/eclipse/statet/internal/docmlet/tex/core/model/LtxReconciler.java
@@ -21,6 +21,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.string.CacheStringFactory;
import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
@@ -38,6 +39,7 @@
import org.eclipse.statet.ltk.ast.core.AstInfo;
import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
import org.eclipse.statet.ltk.model.core.ModelManager;
import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
@@ -160,7 +162,17 @@
protected final void updateAst(final Data data, final int flags,
final IProgressMonitor monitor) {
- final BasicSourceModelStamp stamp= new BasicSourceModelStamp(data.content.getStamp());
+ final Object embeddedSourceConfig;
+ final SourceModelStamp stamp;
+ if (data.embedded != null) {
+ embeddedSourceConfig= data.embedded.getSourceConfig();
+ stamp= new BasicSourceModelStamp(data.content.getStamp(),
+ ImCollections.newList(embeddedSourceConfig) );
+ }
+ else {
+ embeddedSourceConfig= null;
+ stamp= new BasicSourceModelStamp(data.content.getStamp());
+ }
data.ast= data.adapter.getCurrentAst();
if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -181,7 +193,8 @@
final List<Embedded> embeddedNodes= this.raParser.getEmbeddedNodes();
- data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, flags, monitor);
+ data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes,
+ embeddedSourceConfig, flags, monitor );
}
else {
this.raLexer.setNowebType(null);
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
deleted file mode 100644
index d1f7de5..0000000
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/MarkupSourceModelStamp.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2015, 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.docmlet.wikitext.core;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
-import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
-
-
-@NonNullByDefault
-public class MarkupSourceModelStamp extends BasicSourceModelStamp {
-
-
- private final WikitextMarkupLanguage markupLanguage;
-
-
- public MarkupSourceModelStamp(final long sourceStamp, final WikitextMarkupLanguage markupLanguage) {
- super(sourceStamp);
-
- this.markupLanguage= markupLanguage;
- }
-
-
-// public final WikitextMarkupLanguage getLanguage() {
-// return this.language;
-// }
-
-
- @Override
- public int hashCode() {
- return super.hashCode() ^ this.markupLanguage.hashCode();
- }
-
- @Override
- public boolean equals(final @Nullable Object other) {
- return (super.equals(other)
- && this.markupLanguage == ((MarkupSourceModelStamp)other).markupLanguage );
- }
-
-}
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
index bff917c..aaf80af 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/ast/WikitextAstInfo.java
@@ -18,10 +18,10 @@
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
import org.eclipse.statet.docmlet.wikitext.core.markup.WikitextMarkupLanguage;
import org.eclipse.statet.ltk.ast.core.AstInfo;
import org.eclipse.statet.ltk.ast.core.AstNode;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
@NonNullByDefault
@@ -33,7 +33,7 @@
private final Set<String> embeddedTypes;
- public WikitextAstInfo(final int level, final MarkupSourceModelStamp stamp, final AstNode root,
+ public WikitextAstInfo(final int level, final SourceModelStamp stamp, final AstNode root,
final WikitextMarkupLanguage markupLanguage, final Set<String> embeddedTypes) {
super(level, stamp, root);
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
index 6a6e4fc..ba239fe 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/docmlet/wikitext/core/model/build/WikidocSourceUnitModelContainerEmbeddedExtension.java
@@ -32,9 +32,11 @@
// String getNowebType();
-//
+
+ Object getSourceConfig();
+
void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
- final WikitextMarkupLanguage markupLanguage,
+ final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
final int level, final IProgressMonitor monitor);
void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
index 72b7869..a5efac5 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/LtxReconcilerExtension.java
@@ -51,8 +51,13 @@
@Override
+ public Object getSourceConfig() {
+ return "Ltk";
+ }
+
+ @Override
public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
- final WikitextMarkupLanguage markupLanguage,
+ final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
final int level, final IProgressMonitor monitor) {
this.raInput.reset(content.getString());
final TexCommandSet commandSet= TexCore.getWorkbenchAccess().getTexCommandSet();
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
index 96e2a79..0bbb1cb 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/WikidocReconciler.java
@@ -25,10 +25,10 @@
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.text.AbstractDocument;
+import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.string.CacheStringFactory;
import org.eclipse.statet.docmlet.tex.core.model.TexModel;
-import org.eclipse.statet.docmlet.wikitext.core.MarkupSourceModelStamp;
import org.eclipse.statet.docmlet.wikitext.core.WikitextCore;
import org.eclipse.statet.docmlet.wikitext.core.WikitextCoreAccess;
import org.eclipse.statet.docmlet.wikitext.core.ast.Embedded;
@@ -47,9 +47,11 @@
import org.eclipse.statet.ltk.ast.core.util.AstPrinter;
import org.eclipse.statet.ltk.core.Ltk;
import org.eclipse.statet.ltk.core.SourceContent;
+import org.eclipse.statet.ltk.core.SourceModelStamp;
import org.eclipse.statet.ltk.issues.core.ProblemRequestor;
import org.eclipse.statet.ltk.model.core.ModelManager;
import org.eclipse.statet.ltk.model.core.element.WorkspaceSourceUnit;
+import org.eclipse.statet.ltk.model.core.impl.BasicSourceModelStamp;
import org.eclipse.statet.yaml.core.model.YamlModel;
@@ -212,7 +214,19 @@
if (markupLanguage == null) {
throw new UnsupportedOperationException("Markup language is missing.");
}
- final MarkupSourceModelStamp stamp= new MarkupSourceModelStamp(data.content.getStamp(), markupLanguage);
+
+ final Object embeddedSourceConfig;
+ final SourceModelStamp stamp;
+ if (data.embedded != null) {
+ embeddedSourceConfig= data.embedded.getSourceConfig();
+ stamp= new BasicSourceModelStamp(data.content.getStamp(),
+ ImCollections.newList(markupLanguage, embeddedSourceConfig) );
+ }
+ else {
+ embeddedSourceConfig= null;
+ stamp= new BasicSourceModelStamp(data.content.getStamp(),
+ ImCollections.newList(markupLanguage) );
+ }
data.ast= (WikitextAstInfo) data.adapter.getCurrentAst();
if (data.ast != null && !stamp.equals(data.ast.getStamp())) {
@@ -239,18 +253,18 @@
this.yamlExt= new YamlReconcilerExtension();
}
this.yamlExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
- flags, monitor );
+ null, flags, monitor );
}
if (embeddedTypes.containsKey(TexModel.LTX_TYPE_ID)) {
if (this.ltxExt == null) {
this.ltxExt= new LtxReconcilerExtension();
}
this.ltxExt.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
- flags, monitor );
+ null, flags, monitor );
}
if (data.embedded != null) {
data.embedded.reconcileEmbeddedAst(data.content, embeddedNodes, markupLanguage,
- flags, monitor );
+ embeddedSourceConfig, flags, monitor );
}
data.ast= new WikitextAstInfo(1, stamp, sourceNode, markupLanguage,
diff --git a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
index dde49c4..b62a595 100644
--- a/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
+++ b/docmlet/org.eclipse.statet.docmlet.wikitext.core/src/org/eclipse/statet/internal/docmlet/wikitext/core/model/YamlReconcilerExtension.java
@@ -58,8 +58,14 @@
@Override
+ public Object getSourceConfig() {
+ return "Yaml";
+ }
+
+ @Override
public void reconcileEmbeddedAst(final SourceContent content, final List<Embedded> list,
- final WikitextMarkupLanguage markupLanguage, final int level, final IProgressMonitor monitor) {
+ final WikitextMarkupLanguage markupLanguage, final Object sourceConfig,
+ final int level, final IProgressMonitor monitor) {
for (final EmbeddingAstNode embeddingNode : list) {
if (embeddingNode.getForeignTypeId() != YamlModel.YAML_TYPE_ID) {
continue;
@@ -79,7 +85,8 @@
@Override
public void reconcileEmbeddedModel(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
- final List<EmbeddingReconcileTask> list, final int level, final IProgressMonitor monitor) {
+ final List<EmbeddingReconcileTask> list,
+ final int level, final IProgressMonitor monitor) {
final SourceStructElement sourceElement= wikitextModel.getSourceElement();
int metadataCount= 0;
@@ -110,7 +117,8 @@
@Override
public void reportEmbeddedProblems(final SourceContent content, final WikidocSourceUnitModelInfo wikitextModel,
- final ProblemRequestor problemRequestor, final int level, final IProgressMonitor monitor) {
+ final ProblemRequestor problemRequestor,
+ final int level, final IProgressMonitor monitor) {
final YamlSourceUnitModelInfo yamlModel= YamlModel.getYamlModelInfo(wikitextModel);
if (yamlModel == null) {
return;