Commit 95384ade authored by Daniel Honsel's avatar Daniel Honsel
Browse files

added missing reference to fields from template variables

parent 919e4dda
Loading
Loading
Loading
Loading
+22 −7
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import de.ugoe.cs.swe.tTCN3.ComponentDef
import de.ugoe.cs.swe.tTCN3.ComponentDefList
import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList
import de.ugoe.cs.swe.tTCN3.EnumDefNamed
import de.ugoe.cs.swe.tTCN3.FieldExpressionSpec
import de.ugoe.cs.swe.tTCN3.FieldSpec
import de.ugoe.cs.swe.tTCN3.ForStatement
import de.ugoe.cs.swe.tTCN3.FunctionDef
@@ -18,15 +19,19 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList
import de.ugoe.cs.swe.tTCN3.ModuleParDef
import de.ugoe.cs.swe.tTCN3.PortElement
import de.ugoe.cs.swe.tTCN3.PortOrAny
import de.ugoe.cs.swe.tTCN3.PortRef
import de.ugoe.cs.swe.tTCN3.RecordDefNamed
import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed
import de.ugoe.cs.swe.tTCN3.ReferencedType
import de.ugoe.cs.swe.tTCN3.ReferencedValue
import de.ugoe.cs.swe.tTCN3.SendStatement
import de.ugoe.cs.swe.tTCN3.SetDefNamed
import de.ugoe.cs.swe.tTCN3.SetOfDefNamed
import de.ugoe.cs.swe.tTCN3.SignatureDef
import de.ugoe.cs.swe.tTCN3.SingleVarInstance
import de.ugoe.cs.swe.tTCN3.StatementBlock
import de.ugoe.cs.swe.tTCN3.StructDefBody
import de.ugoe.cs.swe.tTCN3.StructFieldDef
import de.ugoe.cs.swe.tTCN3.StructuredTypeDef
import de.ugoe.cs.swe.tTCN3.TTCN3Module
import de.ugoe.cs.swe.tTCN3.TemplateDef
@@ -34,6 +39,7 @@ import de.ugoe.cs.swe.tTCN3.TestcaseDef
import de.ugoe.cs.swe.tTCN3.TimerRefOrAny
import de.ugoe.cs.swe.tTCN3.TypeDef
import de.ugoe.cs.swe.tTCN3.UnionDefNamed
import de.ugoe.cs.swe.tTCN3.VarInstance
import java.util.ArrayList
import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.EReference
@@ -43,12 +49,6 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
import static org.eclipse.xtext.scoping.Scopes.*

import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.*
import de.ugoe.cs.swe.tTCN3.FieldExpressionSpec
import de.ugoe.cs.swe.tTCN3.SendStatement
import de.ugoe.cs.swe.tTCN3.PortRef
import de.ugoe.cs.swe.tTCN3.VarInstance
import de.ugoe.cs.swe.tTCN3.StructDefBody
import de.ugoe.cs.swe.tTCN3.StructFieldDef

class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {

@@ -154,8 +154,23 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider {

	def IScope scope_FieldSpec_ref(FieldSpec spec, EReference ref) {
		val template = spec.findDesiredParent(typeof(TemplateDef)) as TemplateDef
		val variable = spec.findDesiredParent(typeof(VarInstance)) as VarInstance
		val inner = newArrayList

		if (template != null) {
			template.templateFieldScope(inner)
		} else if (variable != null && variable.type.ref != null) {
			val type = variable.type.ref
			if (type instanceof RecordDefNamed) {
				type.body.scopeFieldsStructDefBody(inner)
			} else if (type instanceof SetDefNamed) {
				type.body.scopeFieldsStructDefBody(inner)
			} else if (type instanceof RecordOfDefNamed) {
				//TODO: implement!
			} else if (type instanceof SetOfDefNamed) {
				//TODO: implement!
			}
		}
		scopeFor(inner)
	}