Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +47 −2 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ import de.ugoe.cs.swe.tTCN3.ReferencedValue import java.util.HashMap import de.ugoe.cs.swe.tTCN3.OpCall import de.ugoe.cs.swe.tTCN3.FunctionRef import org.eclipse.xtext.EcoreUtil2 import de.ugoe.cs.swe.tTCN3.SingleValueSpec import de.ugoe.cs.swe.tTCN3.PortReceiveOp import de.ugoe.cs.swe.tTCN3.Value //TODO: switch to TTCN3LocalScopeProvider as base class? class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading Loading @@ -120,6 +124,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { } } } emptyList } private def void scopeFieldReferences(FieldReference fieldRef, ArrayList<EObject> list) { Loading Loading @@ -215,8 +220,16 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { list.addAll(cField.fieldRef.scopeFieldReferences) } else if (sField !== null) { if (sField.ref !== null) { //DONE: handle inline templates that occur in between //TODO: applicable in other situations? test for anomalies.. if (inlineTemplate !== null && sField.isAncestor(inlineTemplate)) { if (inlineTemplate.type !== null && inlineTemplate.type.ref !== null) { list.addAll(inlineTemplate.type.ref.templateFieldScope) } } else { list.addAll(sField.ref.scopeFieldReferences) } } } else if (constDef !== null) { if (constDef.type.ref !== null) { list.addAll(constDef.type.ref.scopeReferencedFields) Loading Loading @@ -280,6 +293,32 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { field.scopeFieldExpressionList } def IScope scope_SingleValueSpec_fieldRef(SingleValueSpec spec, EReference ref) { //TODO: generalise / extract var ArrayList<EObject> list = newArrayList val inlineTemplate = spec.findDesiredParent(PortReceiveOp).template if (inlineTemplate.type !== null && inlineTemplate.type.ref !== null) { list.addAll(inlineTemplate.type.ref.templateFieldScope) } else if (inlineTemplate.template !== null && inlineTemplate.template.simple !== null && inlineTemplate.template.simple.expr !== null ) { val expr = inlineTemplate.template.simple.expr; if (expr instanceof Value) { val value = expr.ref.referencedValue if (value instanceof BaseTemplate) { val l = value.type.ref.scopeReferencedFields list.addAll(value.type.ref.scopeReferencedFields) } else if (value instanceof FormalTemplatePar) { list.addAll(value.type.ref.scopeReferencedFields) } //TODO: others? } } scopeFor(list) } private def IScope scopeOfTimer(EObject variable) { val ArrayList<EObject> list = newArrayList var parent = variable.eContainer Loading Loading @@ -691,6 +730,12 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { target = getParentFieldTarget(target, fields, index) list.addAll(target.directValueElements) } else if (eContainer instanceof Type) { //handle subypes / aliases for types of fields val t = (eContainer as Type) if (t.ref !== null) { list.addAll(t.ref.scopeReferencedFields) } } else { //TODO: check for type? var target = ((eContainer as ReferencedValue).head.target as RefValue) Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +47 −2 Original line number Diff line number Diff line Loading @@ -81,6 +81,10 @@ import de.ugoe.cs.swe.tTCN3.ReferencedValue import java.util.HashMap import de.ugoe.cs.swe.tTCN3.OpCall import de.ugoe.cs.swe.tTCN3.FunctionRef import org.eclipse.xtext.EcoreUtil2 import de.ugoe.cs.swe.tTCN3.SingleValueSpec import de.ugoe.cs.swe.tTCN3.PortReceiveOp import de.ugoe.cs.swe.tTCN3.Value //TODO: switch to TTCN3LocalScopeProvider as base class? class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading Loading @@ -120,6 +124,7 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { } } } emptyList } private def void scopeFieldReferences(FieldReference fieldRef, ArrayList<EObject> list) { Loading Loading @@ -215,8 +220,16 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { list.addAll(cField.fieldRef.scopeFieldReferences) } else if (sField !== null) { if (sField.ref !== null) { //DONE: handle inline templates that occur in between //TODO: applicable in other situations? test for anomalies.. if (inlineTemplate !== null && sField.isAncestor(inlineTemplate)) { if (inlineTemplate.type !== null && inlineTemplate.type.ref !== null) { list.addAll(inlineTemplate.type.ref.templateFieldScope) } } else { list.addAll(sField.ref.scopeFieldReferences) } } } else if (constDef !== null) { if (constDef.type.ref !== null) { list.addAll(constDef.type.ref.scopeReferencedFields) Loading Loading @@ -280,6 +293,32 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { field.scopeFieldExpressionList } def IScope scope_SingleValueSpec_fieldRef(SingleValueSpec spec, EReference ref) { //TODO: generalise / extract var ArrayList<EObject> list = newArrayList val inlineTemplate = spec.findDesiredParent(PortReceiveOp).template if (inlineTemplate.type !== null && inlineTemplate.type.ref !== null) { list.addAll(inlineTemplate.type.ref.templateFieldScope) } else if (inlineTemplate.template !== null && inlineTemplate.template.simple !== null && inlineTemplate.template.simple.expr !== null ) { val expr = inlineTemplate.template.simple.expr; if (expr instanceof Value) { val value = expr.ref.referencedValue if (value instanceof BaseTemplate) { val l = value.type.ref.scopeReferencedFields list.addAll(value.type.ref.scopeReferencedFields) } else if (value instanceof FormalTemplatePar) { list.addAll(value.type.ref.scopeReferencedFields) } //TODO: others? } } scopeFor(list) } private def IScope scopeOfTimer(EObject variable) { val ArrayList<EObject> list = newArrayList var parent = variable.eContainer Loading Loading @@ -691,6 +730,12 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { target = getParentFieldTarget(target, fields, index) list.addAll(target.directValueElements) } else if (eContainer instanceof Type) { //handle subypes / aliases for types of fields val t = (eContainer as Type) if (t.ref !== null) { list.addAll(t.ref.scopeReferencedFields) } } else { //TODO: check for type? var target = ((eContainer as ReferencedValue).head.target as RefValue) Loading