Commit 73d036cd authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ scoping refinements

parent ceffa8a5
Loading
Loading
Loading
Loading
+65 −3
Original line number Diff line number Diff line
@@ -34,20 +34,25 @@ import org.etsi.mts.tdl.Element;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.Extension;
import org.etsi.mts.tdl.FormalParameter;
import org.etsi.mts.tdl.FormalParameterUse;
import org.etsi.mts.tdl.FunctionCall;
import org.etsi.mts.tdl.GateInstance;
import org.etsi.mts.tdl.GateReference;
import org.etsi.mts.tdl.LocalExpression;
import org.etsi.mts.tdl.MappableDataElement;
import org.etsi.mts.tdl.MemberAssignment;
import org.etsi.mts.tdl.MemberReference;
import org.etsi.mts.tdl.Message;
import org.etsi.mts.tdl.DataElementUse;
import org.etsi.mts.tdl.NamedElement;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.PackageableElement;
import org.etsi.mts.tdl.Parameter;
import org.etsi.mts.tdl.ParameterBinding;
import org.etsi.mts.tdl.ParameterMapping;
import org.etsi.mts.tdl.ProcedureCall;
import org.etsi.mts.tdl.ProcedureSignature;
import org.etsi.mts.tdl.SimpleDataInstance;
import org.etsi.mts.tdl.SimpleDataType;
import org.etsi.mts.tdl.StructuredDataInstance;
@@ -245,6 +250,9 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
					} else if (((DataElementMapping)context.eContainer()).getMappableDataElement() instanceof Action) {
							IScope scope = Scopes.scopeFor(((Action)((DataElementMapping)context.eContainer()).getMappableDataElement()).getFormalParameter());
							return scope;
					} else if (((DataElementMapping)context.eContainer()).getMappableDataElement() instanceof ProcedureSignature) {
						IScope scope = Scopes.scopeFor(((ProcedureSignature)((DataElementMapping)context.eContainer()).getMappableDataElement()).getParameter());
						return scope;
					}
				}				
			} else if (context instanceof ParameterBinding) {
@@ -298,6 +306,25 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
						IScope scope = Scopes.scopeFor(((ProcedureCall)context.eContainer()).getSignature().getParameter());
						return scope;
//					}
				} else if (context.eContainer() instanceof DataElementUse) {
					//TODO: extract and simplify
					NamedElement dataElement = ((DataElementUse)context.eContainer()).getDataElement();
					if (dataElement instanceof org.etsi.mts.tdl.Function) {
						IScope scope = Scopes.scopeFor(((org.etsi.mts.tdl.Function)dataElement).getFormalParameter());
						return scope;
					} else if (dataElement instanceof FormalParameter) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)((FormalParameter) dataElement).getDataType()).allMembers());
						return scope;
					} else if (dataElement instanceof StructuredDataInstance) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)((StructuredDataInstance) dataElement).getDataType()).allMembers());
						return scope;
					} else if (dataElement instanceof StructuredDataType) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)dataElement).allMembers());
						return scope;
					}
						
//					IScope scope = Scopes.scopeFor(dataElement.eContents());
//					return scope;
				}
			} else if (context instanceof MemberReference) {
				if (((DataUse)context.eContainer()).getReduction().indexOf(context)>0) {
@@ -349,6 +376,23 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
						IScope scope = Scopes.scopeFor(((StructuredDataType)((VariableUse)context.eContainer()).getVariable().getDataType()).allMembers());
						return scope;
					}
				} else if (context.eContainer() instanceof DataElementUse) {
					NamedElement dataElement = ((DataElementUse) context.eContainer()).getDataElement();
					//TODO: duplicated from above ->extract
					if (dataElement instanceof org.etsi.mts.tdl.Function) {
						IScope scope = Scopes.scopeFor(((org.etsi.mts.tdl.Function)dataElement).getFormalParameter());
						return scope;
					} else if (dataElement instanceof FormalParameter) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)((FormalParameter) dataElement).getDataType()).allMembers());
						return scope;
					} else if (dataElement instanceof StructuredDataInstance) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)((StructuredDataInstance) dataElement).getDataType()).allMembers());
						return scope;
					} else if (dataElement instanceof StructuredDataType) {
						IScope scope = Scopes.scopeFor(((StructuredDataType)dataElement).allMembers());
						return scope;
					}

				} else {
				}
			} else if (context instanceof ValueAssignment) {
@@ -385,6 +429,21 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
		} else {
		}
		
		if (context instanceof DataElementUse) {
			EList<EObject> elements = new BasicEList<>();
			elements.addAll(getScopedElementsOfType(context, MappableDataElement.class));
			TestDescription testDescription = ((DataElementUse) context).getParentTestDescription();
			if (testDescription!=null) {
				elements.addAll(testDescription.getFormalParameter());
			}
//			elements.addAll(getScopedElementsOfType(context, FormalParameter.class));
//			elements.addAll(getScopedElementsOfType(context, StructuredDataType.class));
			return Scopes.scopeFor(elements);
//			NamedElement dataElement = ((NamedDataElementUse)context).getDataElement();
			//EList<EObject> elements = ;
			//return Scopes.scopeFor(dataElement.eContents());
		}
		
		
		if (context instanceof Block) {
			TestDescription testDescription = getTestDescription((Element) context);
@@ -450,7 +509,8 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
		for (PackageableElement e : p.getPackagedElement()) {
			if (c.isInstance(e)) {
				elements.add(e);
			} else if (e instanceof EnumDataType) {
			} 
			if (e instanceof EnumDataType) {
				//TODO: naive enum handling (also below
				for (SimpleDataInstance ev : ((EnumDataType) e).getValue()) {
					elements.add(ev);
@@ -467,7 +527,8 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
					for (PackageableElement e : ip.getPackagedElement()) {
						if (c.isInstance(e)) {
							elements.add(e);
						} else if (e instanceof EnumDataType) {
						}  
						if (e instanceof EnumDataType) {
							//enums
							for (SimpleDataInstance ev : ((EnumDataType) e).getValue()) {
								elements.add(ev);
@@ -479,7 +540,8 @@ public class TDLScopeProvider extends AbstractDeclarativeScopeProvider {
					for (PackageableElement e : i.getImportedElement()) {
						if (c.isInstance(e)) {
							elements.add(e);
						} else if (e instanceof EnumDataType) {
						}  
						if (e instanceof EnumDataType) {
							//enums
							for (SimpleDataInstance ev : ((EnumDataType) e).getValue()) {
								elements.add(ev);