Commit e8b85e29 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ automated/implicit type assignment for enum data instances #66

parent ae043d51
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
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
+33 −0
Original line number Diff line number Diff line
@@ -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;
//	}

}