Bug 577558: [R-Model] Add support for SourceContainerElement
Change-Id: I62facbbe37773cbc835e0bbccd80f8cd85afda86
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java
index d15b2fb..5f767e9 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/CompositeSourceElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/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.r.core.rmodel.RCompositeSourceElement;
import org.eclipse.statet.r.core.rmodel.RLangSourceElement;
@@ -42,9 +43,11 @@
private volatile @Nullable List<RLangSourceElement> allSourceChildren;
- public CompositeSourceElement(final RSourceUnit su, final BuildSourceFrame envir,
+ public CompositeSourceElement(final RSourceUnit sourceUnit,
+ final SourceModelStamp stamp,
+ final BuildSourceFrame envir,
final List<? extends EmbeddedRBuildElement> elements, final TextRegion sourceRange) {
- super(su, envir);
+ super(sourceUnit, stamp, envir);
this.compositeElements= ImCollections.toList(elements);
this.sourceRange= sourceRange;
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
index 10c465d..1960886 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceFileElement.java
@@ -22,8 +22,10 @@
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.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.SourceUnitModelInfo;
import org.eclipse.statet.r.core.rmodel.RElement;
@@ -35,16 +37,22 @@
@NonNullByDefault
-abstract class RSourceFileElement implements RLangSourceElement {
+abstract class RSourceFileElement implements RLangSourceElement,
+ SourceContainerElement<RLangSourceElement> {
private final RSourceUnit sourceUnit;
+ private final SourceModelStamp stamp;
+
protected final BuildSourceFrame envir;
- public RSourceFileElement(final RSourceUnit su, final BuildSourceFrame envir) {
- this.sourceUnit= su;
+ public RSourceFileElement(final RSourceUnit sourceUnit,
+ final SourceModelStamp stamp,
+ final BuildSourceFrame envir) {
+ this.sourceUnit= sourceUnit;
+ this.stamp= stamp;
this.envir= envir;
}
@@ -110,6 +118,11 @@
return this.sourceUnit;
}
+ @Override
+ public SourceModelStamp getStamp() {
+ return this.stamp;
+ }
+
@Override
public @Nullable TextRegion getNameSourceRange() {
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
index c2401e6..c33fa85 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/RSourceUnitElement.java
@@ -21,6 +21,7 @@
import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.ltk.ast.core.AstNode;
+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.r.core.rmodel.RElementName;
@@ -30,15 +31,18 @@
@NonNullByDefault
-final class RSourceUnitElement extends RSourceFileElement implements BuildSourceFrameElement {
+final class RSourceUnitElement extends RSourceFileElement
+ implements BuildSourceFrameElement {
private final RAstNode sourceNode;
private List<? extends RLangSourceElement> sourceChildrenProtected= RSourceModel.NO_R_SOURCE_CHILDREN;
- public RSourceUnitElement(final RSourceUnit su, final BuildSourceFrame envir, final RAstNode node) {
- super(su, envir);
+ public RSourceUnitElement(final RSourceUnit sourceUnit,
+ final SourceModelStamp stamp,
+ final BuildSourceFrame envir, final RAstNode node) {
+ super(sourceUnit, stamp, envir);
this.sourceNode= node;
}
diff --git a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
index c11b267..af2385f 100644
--- a/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
+++ b/r/org.eclipse.statet.r.core/src/org/eclipse/statet/internal/r/core/rmodel/SourceAnalyzer.java
@@ -529,24 +529,26 @@
}
- public @Nullable RSourceUnitModelInfo createModel(final RSourceUnit u, final AstInfo sourceComponent) {
- if (!(sourceComponent.getRoot() instanceof SourceComponent)) {
+ public @Nullable RSourceUnitModelInfo createModel(final RSourceUnit u, final AstInfo ast) {
+ if (!(ast.getRoot() instanceof SourceComponent)) {
throw new IllegalArgumentException("ast"); //$NON-NLS-1$
}
- final SourceComponent root= (SourceComponent)sourceComponent.getRoot();
+ final SourceComponent root= (SourceComponent)ast.getRoot();
this.anonymCount= 0;
this.sourceUnit= u;
try {
init();
- final RSourceUnitElement fileElement= new RSourceUnitElement(this.sourceUnit, this.topLevelEnvir, root);
+ final RSourceUnitElement fileElement= new RSourceUnitElement(
+ this.sourceUnit, ast.getStamp(),
+ this.topLevelEnvir, root );
enterElement(fileElement, this.topLevelEnvir, root);
root.acceptInRChildren(this);
leaveElement();
finish();
- this.ast= new AstInfo(AstInfo.LEVEL_MODEL_DEFAULT, sourceComponent);
+ this.ast= new AstInfo(AstInfo.LEVEL_MODEL_DEFAULT, ast);
final RSourceUnitModelInfoImpl modelInfo= new RSourceUnitModelInfoImpl(this.ast, this.frames, this.topLevelEnvir,
this.packageRefs, this.dependencyEnvironments, fileElement );
@@ -649,7 +651,8 @@
try {
finish();
- final var compositeElement= new CompositeSourceElement(this.sourceUnit,
+ final var compositeElement= new CompositeSourceElement(
+ this.sourceUnit, this.ast.getStamp(),
this.topLevelEnvir, chunkElements, this.ast.getRoot() );
return new RSourceUnitModelInfoImpl(this.ast, this.frames,
this.topLevelEnvir, this.packageRefs, this.dependencyEnvironments,