Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +84 −19 Original line number Diff line number Diff line Loading @@ -3,56 +3,55 @@ package de.ugoe.cs.swe.validation import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList 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.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.ForStatement import de.ugoe.cs.swe.tTCN3.FormalTemplatePar import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.FunctionDef import de.ugoe.cs.swe.tTCN3.FunctionDefList import de.ugoe.cs.swe.tTCN3.FunctionFormalPar import de.ugoe.cs.swe.tTCN3.FunctionFormalParList import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.Initial 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.ModulePar import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ReferencedType 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.SingleConstDef 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.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TTCN3Package 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.TestcaseDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.TypeDefBody import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarList import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EStructuralFeature import org.eclipse.xtext.validation.Check import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.ModulePar import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.SignatureDef import de.ugoe.cs.swe.tTCN3.TypeDefBody import de.ugoe.cs.swe.tTCN3.ReferencedType class TypeAttribs { String name Loading Loading @@ -136,6 +135,72 @@ class TTCN3Validator extends AbstractTTCN3Validator { } } @Check def checkTypeNames(TestcaseDef tc) { val module = tc.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(tc, tc.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.testcaseDef_Name); return; } } @Check def checkTypeNames(FunctionDef function) { val module = function.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(function, function.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.functionRef_Name); return; } } @Check def checkTypeNames(BaseTemplate template) { val module = template.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(template, template.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.baseTemplate_Name); return; } } @Check def checkTypeNames(SignatureDef sig) { val module = sig.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(sig, sig.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.signatureDef_Name); return; } } @Check def checkTypeNames(AltstepDef alt) { val module = alt.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(alt, alt.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.altstepDef_Name); return; } } @Check def checkTypeNames(GroupDef group) { val module = group.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(group, group.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.altstepDef_Name); return; } } def private isNameClashInHierarchy(RefValue variable) { var parent = variable.eContainer val EStructuralFeature feature = TTCN3Package.eINSTANCE.refValue_Name; Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +84 −19 Original line number Diff line number Diff line Loading @@ -3,56 +3,55 @@ package de.ugoe.cs.swe.validation import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDef import de.ugoe.cs.swe.tTCN3.AltstepLocalDefList 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.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.ControlStatementOrDefList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.ForStatement import de.ugoe.cs.swe.tTCN3.FormalTemplatePar import de.ugoe.cs.swe.tTCN3.FormalValuePar import de.ugoe.cs.swe.tTCN3.FunctionDef import de.ugoe.cs.swe.tTCN3.FunctionDefList import de.ugoe.cs.swe.tTCN3.FunctionFormalPar import de.ugoe.cs.swe.tTCN3.FunctionFormalParList import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.Initial 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.ModulePar import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ReferencedType 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.SingleConstDef 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.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TTCN3Package 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.TestcaseDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.TypeDefBody import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.VarList import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EStructuralFeature import org.eclipse.xtext.validation.Check import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import de.ugoe.cs.swe.tTCN3.GroupDef import de.ugoe.cs.swe.tTCN3.TypeDef import de.ugoe.cs.swe.tTCN3.ModuleParDef import de.ugoe.cs.swe.tTCN3.ModuleParameter import de.ugoe.cs.swe.tTCN3.ModulePar import de.ugoe.cs.swe.tTCN3.RecordOfDefNamed import de.ugoe.cs.swe.tTCN3.SetOfDefNamed import de.ugoe.cs.swe.tTCN3.RecordDefNamed import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.UnionDefNamed import de.ugoe.cs.swe.tTCN3.SetDefNamed import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.SignatureDef import de.ugoe.cs.swe.tTCN3.TypeDefBody import de.ugoe.cs.swe.tTCN3.ReferencedType class TypeAttribs { String name Loading Loading @@ -136,6 +135,72 @@ class TTCN3Validator extends AbstractTTCN3Validator { } } @Check def checkTypeNames(TestcaseDef tc) { val module = tc.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(tc, tc.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.testcaseDef_Name); return; } } @Check def checkTypeNames(FunctionDef function) { val module = function.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(function, function.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.functionRef_Name); return; } } @Check def checkTypeNames(BaseTemplate template) { val module = template.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(template, template.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.baseTemplate_Name); return; } } @Check def checkTypeNames(SignatureDef sig) { val module = sig.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(sig, sig.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.signatureDef_Name); return; } } @Check def checkTypeNames(AltstepDef alt) { val module = alt.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(alt, alt.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.altstepDef_Name); return; } } @Check def checkTypeNames(GroupDef group) { val module = group.findDesiredParent(typeof(TTCN3Module)) as TTCN3Module if (module.defs.checkNameClashModuleDefinitionsList(group, group.name)) { error('Name clash with another variable definition in this scope!', TTCN3Package.eINSTANCE.altstepDef_Name); return; } } def private isNameClashInHierarchy(RefValue variable) { var parent = variable.eContainer val EStructuralFeature feature = TTCN3Package.eINSTANCE.refValue_Name; Loading