From adb5f19cbe5b022f3296886feb0480199d6452ba Mon Sep 17 00:00:00 2001 From: makedonski <makedonski@informatik.uni-goettingen.de> Date: Fri, 6 Oct 2017 14:32:08 +0200 Subject: [PATCH] + further refinements for scoping of reductions Change-Id: Iaad19c63f7f2b835a241fb1842de70e8a305635b Signed-off-by: makedonski <makedonski@informatik.uni-goettingen.de> --- .../mts/tdl/scoping/TDLan2ScopeProvider.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.TDLan2/src/org/etsi/mts/tdl/scoping/TDLan2ScopeProvider.java b/plugins/org.etsi.mts.tdl.TDLan2/src/org/etsi/mts/tdl/scoping/TDLan2ScopeProvider.java index 550f9ec2..2b3d3cd0 100644 --- a/plugins/org.etsi.mts.tdl.TDLan2/src/org/etsi/mts/tdl/scoping/TDLan2ScopeProvider.java +++ b/plugins/org.etsi.mts.tdl.TDLan2/src/org/etsi/mts/tdl/scoping/TDLan2ScopeProvider.java @@ -16,12 +16,16 @@ import org.etsi.mts.tdl.ComponentInstance; import org.etsi.mts.tdl.Connection; import org.etsi.mts.tdl.DataElementMapping; import org.etsi.mts.tdl.DataInstanceUse; +import org.etsi.mts.tdl.DataUse; import org.etsi.mts.tdl.Element; +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.Member; import org.etsi.mts.tdl.MemberAssignment; +import org.etsi.mts.tdl.MemberReference; import org.etsi.mts.tdl.Parameter; import org.etsi.mts.tdl.ParameterBinding; import org.etsi.mts.tdl.ParameterMapping; @@ -49,7 +53,6 @@ public class TDLan2ScopeProvider extends AbstractDeclarativeScopeProvider { @Override public IScope getScope(EObject context, EReference reference) { - if (reference.getEType().getInstanceClass() == GateInstance.class) { if (context instanceof GateReference) { GateReference gate = (GateReference) context; @@ -119,6 +122,36 @@ public class TDLan2ScopeProvider extends AbstractDeclarativeScopeProvider { return scope; // } } + } else if (context instanceof MemberReference) { + if (((DataUse)context.eContainer()).getReduction().indexOf(context)>0) { + EObject targetContext = ((DataUse)context.eContainer()).getReduction().get(((DataUse)context.eContainer()).getReduction().indexOf(context)-1); + if (((MemberReference)targetContext).getMember().getDataType() instanceof StructuredDataType) { + IScope scope = Scopes.scopeFor(((StructuredDataType)((MemberReference)targetContext).getMember().getDataType()).getMember()); + return scope; + } + } else + if (context.eContainer() instanceof DataInstanceUse) { + if (((DataInstanceUse)context.eContainer()).getDataInstance() instanceof StructuredDataInstance) { + IScope scope = Scopes.scopeFor(((StructuredDataType)((StructuredDataInstance)((DataInstanceUse)context.eContainer()).getDataInstance()).getDataType()).getMember()); + return scope; + } + } else if (context.eContainer() instanceof FunctionCall) { + if (((FunctionCall)context.eContainer()).getFunction().getReturnType() instanceof StructuredDataType) { + IScope scope = Scopes.scopeFor(((StructuredDataType)((FunctionCall)context.eContainer()).getFunction().getReturnType()).getMember()); + return scope; + } + } else if (context.eContainer() instanceof FormalParameterUse) { + if (((FormalParameterUse)context.eContainer()).getParameter().getDataType() instanceof StructuredDataType) { + IScope scope = Scopes.scopeFor(((StructuredDataType)((FormalParameterUse)context.eContainer()).getParameter().getDataType()).getMember()); + return scope; + } + } else if (context.eContainer() instanceof VariableUse) { + if (((VariableUse)context.eContainer()).getVariable().getDataType() instanceof StructuredDataType) { + IScope scope = Scopes.scopeFor(((StructuredDataType)((VariableUse)context.eContainer()).getVariable().getDataType()).getMember()); + return scope; + } + } else { + } } } else if (reference.getEType().getInstanceClass() == Variable.class) { if (context instanceof Assignment) { @@ -141,7 +174,8 @@ public class TDLan2ScopeProvider extends AbstractDeclarativeScopeProvider { } } else { } - + + if (context instanceof Block) { TestDescription testDescription = getTestDescription((Element) context); if (testDescription!=null) { -- GitLab