Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import 'http://www.eclipse.org/emf/2002/Ecore' as ecore TTCN3File: {TTCN3File} expressions+=TTCN3Module*; modules+=TTCN3Module*; ConstDef: CONSTKEYWORD type=Type defs=ConstList; Loading Loading @@ -634,7 +634,7 @@ VarList: ReferencedType: SubTypeDefNamed | RecordDefNamed | SetDefNamed | PortDef | ComponentDef | UnionDefNamed | EnumDefNamed | RecordOfDefNamed | SetOfDefNamed | SignatureDef; RecordOfDefNamed | SetOfDefNamed | SignatureDef | GroupDef | TTCN3Module; TypeDef: TYPEDEFKEYWORD body=TypeDefBody; Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/common/TTCN3ScopeHelper.xtend +46 −43 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import de.ugoe.cs.swe.tTCN3.ComponentDefList import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList import de.ugoe.cs.swe.tTCN3.EnumDef import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.Enumeration import de.ugoe.cs.swe.tTCN3.EnumerationList Loading Loading @@ -35,20 +36,17 @@ 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.SubTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalPar import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalParList import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarList import java.util.ArrayList import org.eclipse.emf.ecore.EObject import de.ugoe.cs.swe.tTCN3.EnumDef import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed class TTCN3ScopeHelper { Loading @@ -75,26 +73,27 @@ class TTCN3ScopeHelper { } } // TODO: test me! def static void scopeModuleVariable(TTCN3Module module, ArrayList<EObject> list) { if (module.defs != null) { module.defs.scopeModuleVariable(list) def static void scopeModuleTypes(ModuleDefinitionsList moduleDefs, ArrayList<EObject> res, boolean onlyPorts) { var StructuredTypeDef struct = null; var SubTypeDef sub = null; for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef group.list.scopeModuleVariable(list) } // treat signature as type: makes things easy and should be changed eventually if (!onlyPorts) { for (ModuleDefinition d : moduleDefs.definitions.filter[it.def instanceof SignatureDef]) { res.add(d.def) } } def static void scopeModuleTypes(ModuleDefinitionsList moduleDefs, ReferencedType type, ArrayList<EObject> res) { var StructuredTypeDef struct = null; var SubTypeDef sub = null; for (ModuleDefinition d : moduleDefs.definitions.filter[it.def instanceof TypeDef]) { struct = (d.def as TypeDef).body.structured sub = (d.def as TypeDef).body.sub if (onlyPorts) { if (struct != null && struct.port != null) { res.add(struct.port) } } else { if (struct != null) { if (struct.record != null && struct.record instanceof RecordDefNamed) { res.add(struct.record) Loading @@ -118,6 +117,8 @@ class TTCN3ScopeHelper { res.add(sub) } } } } } Loading Loading @@ -216,6 +217,7 @@ class TTCN3ScopeHelper { } def static void scopeTemplateParameter(TemplateDef template, ArrayList<EObject> list) { if (template.base.parList != null) { for (TemplateOrValueFormalPar p : template.base.parList.params) { if (p.value != null) { list.add(p.value) Loading @@ -224,6 +226,7 @@ class TTCN3ScopeHelper { } } } } def static void scopeTemplateOrValueFormalParList(TemplateOrValueFormalParList paramsList, ArrayList<EObject> list) { Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +81 −24 Original line number Diff line number Diff line Loading @@ -2,10 +2,10 @@ package de.ugoe.cs.swe.scoping import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDef import de.ugoe.cs.swe.tTCN3.BaseTemplate 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.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.FieldExpressionSpec import de.ugoe.cs.swe.tTCN3.FieldSpec Loading @@ -19,26 +19,22 @@ import de.ugoe.cs.swe.tTCN3.ModuleControlPart import de.ugoe.cs.swe.tTCN3.ModuleDefinition import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.PortInstance 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.SingleTempVarInstance import de.ugoe.cs.swe.tTCN3.SingleVarInstance import de.ugoe.cs.swe.tTCN3.StatementBlock 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 import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TimerRefOrAny import de.ugoe.cs.swe.tTCN3.Type import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarInstance import org.eclipse.emf.ecore.EReference import org.eclipse.xtext.scoping.IScope Loading @@ -47,9 +43,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.BaseTemplate import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading @@ -67,6 +60,12 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { while (parent != null) { if (parent instanceof TTCN3Module) { parent.defs.scopeModuleVariable(list) for (ModuleDefinition g : parent.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleVariable(list) } } } else if (parent instanceof StatementBlock) { parent.scopeStatementBlock(list) } else if (parent instanceof Initial) { Loading Loading @@ -101,26 +100,25 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { } parent = parent.eContainer } scopeFor(list) } //TODO: fix me!!! def IScope scope_ReferencedType(ReferencedType type, EReference ref) { val module = type.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val res = newArrayList val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(type, res) module.defs.scopeModuleTypes(list, false) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(type, res) group.list.scopeModuleTypes(list, false) } } } scopeFor(res) scopeFor(list) } def IScope scope_ComponentDef_extends(ComponentDef component, EReference ref) { Loading @@ -142,25 +140,48 @@ 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 val field = spec.findDesiredParent(typeof(FieldSpec)) as FieldSpec val list = newArrayList if (template != null) { template.templateFieldScope(inner) if (field != null) { val fieldRef = field.ref if (fieldRef instanceof StructFieldDef) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } else if (field.ref instanceof FormalValuePar) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } } else if (template != null) { template.templateFieldScope(list) } else if (variable != null && variable.type.ref != null) { variable.type.ref.scopeReferencedFields(inner) variable.type.ref.scopeReferencedFields(list) } scopeFor(inner) scopeFor(list) } def IScope scope_FieldExpressionSpec_fieldRef(FieldExpressionSpec field, EReference ref) { val template = field.findDesiredParent(typeof(TemplateDef)) as TemplateDef val variable = field.findDesiredParent(typeof(VarInstance)) as VarInstance val cField = field.findDesiredParent(typeof(FieldExpressionSpec)) as FieldExpressionSpec val list = newArrayList if (template != null) { template.templateFieldScope(list) if (cField != null) { val fieldRef = cField.fieldRef if (fieldRef instanceof StructFieldDef) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } if (variable != null && variable.type.ref != null) { } else if (cField.fieldRef instanceof FormalValuePar) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } } else if (template != null) { template.templateFieldScope(list) } else if (variable != null && variable.type.ref != null) { variable.type.ref.scopeReferencedFields(list) } scopeFor(list) Loading Loading @@ -261,7 +282,43 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { parent.field.type.ref.scopeReferencedFields(list) } } else if (parent.field instanceof FormalValuePar) { // TODO: check and implement if required! if (parent.field.type != null) { parent.field.type.ref.scopeReferencedFields(list) } } } scopeFor(list) } def IScope scope_PortInstance_ref(PortInstance port, EReference ref) { val module = port.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(list, true) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(list, true) } } } scopeFor(list) } def IScope scope_Type_ref(Type type, EReference ref) { val module = type.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(list, false) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(list, false) } } } scopeFor(list) Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { val char pattern = 'M'; if (module.name.charAt(0) != pattern) { warning('Module names should start with M!', TTCN3Package.eINSTANCE.TTCN3Module_Name); warning('Module names should start with M!', TTCN3Package.eINSTANCE.referencedType_Name); } } Loading Loading @@ -172,7 +172,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { if (module.checkNameClashesModuleDefs(group, group.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.groupDef_Name); TTCN3Package.eINSTANCE.referencedType_Name); return; } } Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ import 'http://www.eclipse.org/emf/2002/Ecore' as ecore TTCN3File: {TTCN3File} expressions+=TTCN3Module*; modules+=TTCN3Module*; ConstDef: CONSTKEYWORD type=Type defs=ConstList; Loading Loading @@ -634,7 +634,7 @@ VarList: ReferencedType: SubTypeDefNamed | RecordDefNamed | SetDefNamed | PortDef | ComponentDef | UnionDefNamed | EnumDefNamed | RecordOfDefNamed | SetOfDefNamed | SignatureDef; RecordOfDefNamed | SetOfDefNamed | SignatureDef | GroupDef | TTCN3Module; TypeDef: TYPEDEFKEYWORD body=TypeDefBody; Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/common/TTCN3ScopeHelper.xtend +46 −43 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ import de.ugoe.cs.swe.tTCN3.ComponentDefList import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList import de.ugoe.cs.swe.tTCN3.EnumDef import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.Enumeration import de.ugoe.cs.swe.tTCN3.EnumerationList Loading Loading @@ -35,20 +36,17 @@ 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.SubTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalPar import de.ugoe.cs.swe.tTCN3.TemplateOrValueFormalParList import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarList import java.util.ArrayList import org.eclipse.emf.ecore.EObject import de.ugoe.cs.swe.tTCN3.EnumDef import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.StructuredTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed class TTCN3ScopeHelper { Loading @@ -75,26 +73,27 @@ class TTCN3ScopeHelper { } } // TODO: test me! def static void scopeModuleVariable(TTCN3Module module, ArrayList<EObject> list) { if (module.defs != null) { module.defs.scopeModuleVariable(list) def static void scopeModuleTypes(ModuleDefinitionsList moduleDefs, ArrayList<EObject> res, boolean onlyPorts) { var StructuredTypeDef struct = null; var SubTypeDef sub = null; for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef group.list.scopeModuleVariable(list) } // treat signature as type: makes things easy and should be changed eventually if (!onlyPorts) { for (ModuleDefinition d : moduleDefs.definitions.filter[it.def instanceof SignatureDef]) { res.add(d.def) } } def static void scopeModuleTypes(ModuleDefinitionsList moduleDefs, ReferencedType type, ArrayList<EObject> res) { var StructuredTypeDef struct = null; var SubTypeDef sub = null; for (ModuleDefinition d : moduleDefs.definitions.filter[it.def instanceof TypeDef]) { struct = (d.def as TypeDef).body.structured sub = (d.def as TypeDef).body.sub if (onlyPorts) { if (struct != null && struct.port != null) { res.add(struct.port) } } else { if (struct != null) { if (struct.record != null && struct.record instanceof RecordDefNamed) { res.add(struct.record) Loading @@ -118,6 +117,8 @@ class TTCN3ScopeHelper { res.add(sub) } } } } } Loading Loading @@ -216,6 +217,7 @@ class TTCN3ScopeHelper { } def static void scopeTemplateParameter(TemplateDef template, ArrayList<EObject> list) { if (template.base.parList != null) { for (TemplateOrValueFormalPar p : template.base.parList.params) { if (p.value != null) { list.add(p.value) Loading @@ -224,6 +226,7 @@ class TTCN3ScopeHelper { } } } } def static void scopeTemplateOrValueFormalParList(TemplateOrValueFormalParList paramsList, ArrayList<EObject> list) { Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/scoping/TTCN3ScopeProvider.xtend +81 −24 Original line number Diff line number Diff line Loading @@ -2,10 +2,10 @@ package de.ugoe.cs.swe.scoping import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDef import de.ugoe.cs.swe.tTCN3.BaseTemplate 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.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.FieldExpressionSpec import de.ugoe.cs.swe.tTCN3.FieldSpec Loading @@ -19,26 +19,22 @@ import de.ugoe.cs.swe.tTCN3.ModuleControlPart import de.ugoe.cs.swe.tTCN3.ModuleDefinition import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.PortInstance 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.SingleTempVarInstance import de.ugoe.cs.swe.tTCN3.SingleVarInstance import de.ugoe.cs.swe.tTCN3.StatementBlock 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 import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TimerRefOrAny import de.ugoe.cs.swe.tTCN3.Type import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarInstance import org.eclipse.emf.ecore.EReference import org.eclipse.xtext.scoping.IScope Loading @@ -47,9 +43,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.BaseTemplate import de.ugoe.cs.swe.tTCN3.SubTypeDef import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { Loading @@ -67,6 +60,12 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { while (parent != null) { if (parent instanceof TTCN3Module) { parent.defs.scopeModuleVariable(list) for (ModuleDefinition g : parent.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleVariable(list) } } } else if (parent instanceof StatementBlock) { parent.scopeStatementBlock(list) } else if (parent instanceof Initial) { Loading Loading @@ -101,26 +100,25 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { } parent = parent.eContainer } scopeFor(list) } //TODO: fix me!!! def IScope scope_ReferencedType(ReferencedType type, EReference ref) { val module = type.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val res = newArrayList val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(type, res) module.defs.scopeModuleTypes(list, false) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(type, res) group.list.scopeModuleTypes(list, false) } } } scopeFor(res) scopeFor(list) } def IScope scope_ComponentDef_extends(ComponentDef component, EReference ref) { Loading @@ -142,25 +140,48 @@ 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 val field = spec.findDesiredParent(typeof(FieldSpec)) as FieldSpec val list = newArrayList if (template != null) { template.templateFieldScope(inner) if (field != null) { val fieldRef = field.ref if (fieldRef instanceof StructFieldDef) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } else if (field.ref instanceof FormalValuePar) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } } else if (template != null) { template.templateFieldScope(list) } else if (variable != null && variable.type.ref != null) { variable.type.ref.scopeReferencedFields(inner) variable.type.ref.scopeReferencedFields(list) } scopeFor(inner) scopeFor(list) } def IScope scope_FieldExpressionSpec_fieldRef(FieldExpressionSpec field, EReference ref) { val template = field.findDesiredParent(typeof(TemplateDef)) as TemplateDef val variable = field.findDesiredParent(typeof(VarInstance)) as VarInstance val cField = field.findDesiredParent(typeof(FieldExpressionSpec)) as FieldExpressionSpec val list = newArrayList if (template != null) { template.templateFieldScope(list) if (cField != null) { val fieldRef = cField.fieldRef if (fieldRef instanceof StructFieldDef) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } if (variable != null && variable.type.ref != null) { } else if (cField.fieldRef instanceof FormalValuePar) { if (fieldRef.type != null && fieldRef.type.ref != null) { fieldRef.type.ref.scopeReferencedFields(list) } } } else if (template != null) { template.templateFieldScope(list) } else if (variable != null && variable.type.ref != null) { variable.type.ref.scopeReferencedFields(list) } scopeFor(list) Loading Loading @@ -261,7 +282,43 @@ class TTCN3ScopeProvider extends AbstractDeclarativeScopeProvider { parent.field.type.ref.scopeReferencedFields(list) } } else if (parent.field instanceof FormalValuePar) { // TODO: check and implement if required! if (parent.field.type != null) { parent.field.type.ref.scopeReferencedFields(list) } } } scopeFor(list) } def IScope scope_PortInstance_ref(PortInstance port, EReference ref) { val module = port.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(list, true) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(list, true) } } } scopeFor(list) } def IScope scope_Type_ref(Type type, EReference ref) { val module = type.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module val list = newArrayList if (module.defs != null) { module.defs.scopeModuleTypes(list, false) for (ModuleDefinition g : module.defs.definitions.filter[it.def instanceof GroupDef]) { val GroupDef group = g.def as GroupDef if (group.list != null) { group.list.scopeModuleTypes(list, false) } } } scopeFor(list) Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { val char pattern = 'M'; if (module.name.charAt(0) != pattern) { warning('Module names should start with M!', TTCN3Package.eINSTANCE.TTCN3Module_Name); warning('Module names should start with M!', TTCN3Package.eINSTANCE.referencedType_Name); } } Loading Loading @@ -172,7 +172,7 @@ class TTCN3Validator extends AbstractTTCN3Validator { if (module.checkNameClashesModuleDefs(group, group.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.groupDef_Name); TTCN3Package.eINSTANCE.referencedType_Name); return; } } Loading