diff --git a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxDerivedStateComputer.java b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxDerivedStateComputer.java new file mode 100644 index 0000000000000000000000000000000000000000..bbe330a48dc321415d085771006c2e53ae1216d8 --- /dev/null +++ b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxDerivedStateComputer.java @@ -0,0 +1,36 @@ +package org.etsi.mts.tdl; + +import java.util.List; + +import org.eclipse.xtext.EcoreUtil2; +import org.eclipse.xtext.resource.DerivedStateAwareResource; +import org.eclipse.xtext.resource.IDerivedStateComputer; + +//TODO: move upstream +class TDLtxDerivedStateComputer implements IDerivedStateComputer { + + @Override + public void installDerivedState(DerivedStateAwareResource resource, boolean preLinkingPhase) { + List<EnumDataType> enums = EcoreUtil2.getAllContentsOfType(resource.getContents().get(0), EnumDataType.class); + enums.forEach(e-> { + e.getValue().forEach(v -> v.setDataType(e)); + }); +// //TODO: also for gate references (instead of in scope?) +// List<GateReference> grs = EcoreUtil2.getAllContentsOfType(resource.getContents().get(0), GateReference.class); +// grs.forEach(e-> e.setName(e.getName()==null ? +// null //e.getComponent().getName()+"_"+e.getGate().getName() +// : e.getName())); +// grs.forEach(e-> System.out.println(e.getName())); + } + + @Override + public void discardDerivedState(DerivedStateAwareResource resource) { + List<EnumDataType> enums = EcoreUtil2.getAllContentsOfType(resource.getContents().get(0), EnumDataType.class); + enums.forEach(e-> { + e.getValue().forEach(v -> v.setDataType(null)); + }); +// //TODO: also for gate references (instead of in scope?) +// List<GateReference> grs = EcoreUtil2.getAllContentsOfType(resource.getContents().get(0), GateReference.class); +// grs.forEach(e-> e.setName(null)); + } +} \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxRuntimeModule.java b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxRuntimeModule.java index 7147cf327b0acad484bd948fea8292dcc225eacb..c1d1d2e3177183cebf3467d86c20c2251f2599e8 100644 --- a/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxRuntimeModule.java +++ b/plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtxRuntimeModule.java @@ -6,7 +6,15 @@ package org.etsi.mts.tdl; import org.eclipse.xtext.conversion.IValueConverterService; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.naming.IQualifiedNameProvider; +import org.eclipse.xtext.resource.DerivedStateAwareResource; +import org.eclipse.xtext.resource.DerivedStateAwareResourceDescriptionManager; +import org.eclipse.xtext.resource.IDefaultResourceDescriptionStrategy; +import org.eclipse.xtext.resource.IDerivedStateComputer; +import org.eclipse.xtext.resource.IResourceDescription; +import org.eclipse.xtext.resource.XtextResource; +import org.eclipse.xtext.scoping.IGlobalScopeProvider; import org.etsi.mts.tdl.scoping.TDLQualifiedNameConverter; +import org.etsi.mts.tdl.scoping.TDLtxGlobalScopeProvider; import org.etsi.mts.tdl.scoping.TdlQualifiedNameProvider; /** @@ -24,4 +32,29 @@ public class TDLtxRuntimeModule extends AbstractTDLtxRuntimeModule { public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { return TdlQualifiedNameProvider.class; } + + public Class<? extends IDerivedStateComputer> bindIDerivedStateComputer() { + return TDLtxDerivedStateComputer.class; + } + + // Not needed for Xbase-projects + @Override + public Class<? extends XtextResource> bindXtextResource() { + return DerivedStateAwareResource.class; + } + + // Not needed for Xbase-projects + public Class<? extends IResourceDescription.Manager> bindIResourceDescriptionManager() { + return DerivedStateAwareResourceDescriptionManager.class; + } + +// public Class<? extends IDefaultResourceDescriptionStrategy> bindIDefaultResourceDescriptionStrategy() { +// return RDS.class; +// } + +// @Override +// public Class<? extends IGlobalScopeProvider> bindIGlobalScopeProvider() { +// return TDLtxGlobalScopeProvider.class; +// } + }