Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +3 −6 Original line number Diff line number Diff line Loading @@ -397,20 +397,17 @@ AltGuardChar: {AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE; AltstepInstance: AltstepRef LPAREN list=FunctionActualParList? RPAREN; AltstepRef: name=[AltstepDef|ExtendedIdentifier]; ref=[AltstepDef|IDENTIFIER] LPAREN list=FunctionActualParList? RPAREN; FunctionInstance: FunctionRef LPAREN params=FunctionActualParList? RPAREN; ref=[FunctionRef|IDENTIFIER] LPAREN params=FunctionActualParList? RPAREN; //TODO: check references // scope fore something like this: foo.bar.func // ext ref ok? // usage / semantic of PreDefFunctionIdentifier? FunctionRef: name=[FunctionDef|IDENTIFIER] | name=[ExtFunctionDef|IDENTIFIER]; FunctionDef | ExtFunctionDef; //(IDENTIFIER DOT)? IDENTIFIER; //PreDefFunctionIdentifier returns ecore::EString: Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +48 −19 Original line number Diff line number Diff line /* * generated by Xtext */ package de.ugoe.cs.swe.validation //import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.Check import de.ugoe.cs.swe.tTCN3.SingleConstDef import de.ugoe.cs.swe.tTCN3.TTCN3Package import org.eclipse.emf.ecore.EObject import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.ModuleDefinition import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.TTCN3Module /** * Custom validation rules. * * see http://www.eclipse.org/Xtext/documentation.html#validation */ class TTCN3Validator extends AbstractTTCN3Validator { // public static val INVALID_NAME = 'invalidName' // // @Check // def checkGreetingStartsWithCapital(Greeting greeting) { // if (!Character.isUpperCase(greeting.name.charAt(0))) { // warning('Name should start with a capital', // MyDslPackage.Literals.GREETING__NAME, // INVALID_NAME) // } // } @Check def checkUniqueNameNestedVariable(SingleConstDef variable) { val container = variable.moduleDefList if (container == null) return; val defs = container.definitions.filter[it.def instanceof ConstDef] for (EObject v : defs) { val constDefList = ((v as ModuleDefinition).def as ConstDef).defs as ConstList for (SingleConstDef d : constDefList.list) { if (d != variable && d.name == variable.name) { // TODO: TTCN3Package$Literals::SINGLE_CONST_DEF__NAME error('Name clash with constant variable definition in parent module!', null, -1); return; } } } } def private ModuleDefinitionsList getModuleDefList(EObject o) { if (o.eContainer == null) null else if (o.eContainer instanceof ModuleDefinitionsList) o.eContainer as ModuleDefinitionsList else o.eContainer.getModuleDefList } @Check def checkModuleStartsWithM(TTCN3Module module) { // TODO: module.name.toString.charAt(0) --> module.name.charAt(0) if (module.name.toString.charAt(0) != 'M') { //TODO: TTCN3Package$Literals::TTCN3_MODULE__NAME warning('Module names should start with M!', null, -1); } } } Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +3 −6 Original line number Diff line number Diff line Loading @@ -397,20 +397,17 @@ AltGuardChar: {AltGuardChar} SQUAREOPEN expr=BooleanExpression? SQUARECLOSE; AltstepInstance: AltstepRef LPAREN list=FunctionActualParList? RPAREN; AltstepRef: name=[AltstepDef|ExtendedIdentifier]; ref=[AltstepDef|IDENTIFIER] LPAREN list=FunctionActualParList? RPAREN; FunctionInstance: FunctionRef LPAREN params=FunctionActualParList? RPAREN; ref=[FunctionRef|IDENTIFIER] LPAREN params=FunctionActualParList? RPAREN; //TODO: check references // scope fore something like this: foo.bar.func // ext ref ok? // usage / semantic of PreDefFunctionIdentifier? FunctionRef: name=[FunctionDef|IDENTIFIER] | name=[ExtFunctionDef|IDENTIFIER]; FunctionDef | ExtFunctionDef; //(IDENTIFIER DOT)? IDENTIFIER; //PreDefFunctionIdentifier returns ecore::EString: Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/TTCN3Validator.xtend +48 −19 Original line number Diff line number Diff line /* * generated by Xtext */ package de.ugoe.cs.swe.validation //import org.eclipse.xtext.validation.Check import org.eclipse.xtext.validation.Check import de.ugoe.cs.swe.tTCN3.SingleConstDef import de.ugoe.cs.swe.tTCN3.TTCN3Package import org.eclipse.emf.ecore.EObject import de.ugoe.cs.swe.tTCN3.ModuleDefinitionsList import de.ugoe.cs.swe.tTCN3.ModuleDefinition import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.TTCN3Module /** * Custom validation rules. * * see http://www.eclipse.org/Xtext/documentation.html#validation */ class TTCN3Validator extends AbstractTTCN3Validator { // public static val INVALID_NAME = 'invalidName' // // @Check // def checkGreetingStartsWithCapital(Greeting greeting) { // if (!Character.isUpperCase(greeting.name.charAt(0))) { // warning('Name should start with a capital', // MyDslPackage.Literals.GREETING__NAME, // INVALID_NAME) // } // } @Check def checkUniqueNameNestedVariable(SingleConstDef variable) { val container = variable.moduleDefList if (container == null) return; val defs = container.definitions.filter[it.def instanceof ConstDef] for (EObject v : defs) { val constDefList = ((v as ModuleDefinition).def as ConstDef).defs as ConstList for (SingleConstDef d : constDefList.list) { if (d != variable && d.name == variable.name) { // TODO: TTCN3Package$Literals::SINGLE_CONST_DEF__NAME error('Name clash with constant variable definition in parent module!', null, -1); return; } } } } def private ModuleDefinitionsList getModuleDefList(EObject o) { if (o.eContainer == null) null else if (o.eContainer instanceof ModuleDefinitionsList) o.eContainer as ModuleDefinitionsList else o.eContainer.getModuleDefList } @Check def checkModuleStartsWithM(TTCN3Module module) { // TODO: module.name.toString.charAt(0) --> module.name.charAt(0) if (module.name.toString.charAt(0) != 'M') { //TODO: TTCN3Package$Literals::TTCN3_MODULE__NAME warning('Module names should start with M!', null, -1); } } }