Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +1 −0 Original line number Diff line number Diff line Loading @@ -678,6 +678,7 @@ SubTypeDef: SubTypeDefNamed: type=Type name=IDENTIFIER array=ArrayDef? spec=SubTypeSpec?; // TODO: generate inheritance for named types! StructuredTypeDef: record=RecordDef | union=UnionDef | set=SetDef | recordOf=RecordOfDef | setOf=SetOfDef | enumDef=EnumDef | port=PortDef | component=ComponentDef; Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +67 −17 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.xtext.EcoreUtil2.* import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.ExtFunctionDef import java.util.HashMap class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading @@ -88,7 +89,7 @@ class CheckDefinitionComeFirstParameter { } class CodeStyleValidator extends AbstractDeclarativeValidator { val static Map<String, ArrayList<String>> moduleLevelIdentifiersMap = new ConcurrentHashMap<String, ArrayList<String>>(); val static Map<String, HashMap<String, List<TTCN3Reference>>> moduleLevelIdentifiersMap = new ConcurrentHashMap<String, HashMap<String, List<TTCN3Reference>>>(); val ConfigTools configTools = ConfigTools.getInstance; var QualityCheckProfile activeProfile = configTools.selectedProfile as QualityCheckProfile final TTCN3StatisticsProvider statistics = TTCN3StatisticsProvider.getInstance Loading Loading @@ -565,7 +566,7 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { return; val parentModule = definition.findDesiredParent(TTCN3Module) var ArrayList<String> identifiers = newArrayList var HashMap<String, List<TTCN3Reference>> identifiers = newHashMap var idExists = false var TTCN3Reference detailDef = null Loading @@ -578,47 +579,94 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { if (definition.def instanceof ConstDef) { val constDefList = (definition.def as ConstDef).defs as ConstList for (SingleConstDef d : constDefList.list) { idExists = d.name.checkIdentifier(identifiers) detailDef = d idExists = d.name.checkIdentifier(detailDef, identifiers) } } else if (definition.def instanceof ModuleParDef) { if ((definition.def as ModuleParDef).param != null) { for (ModuleParameter p : (definition.def as ModuleParDef).param.list.params) { idExists = p.name.checkIdentifier(identifiers) detailDef = p idExists = p.name.checkIdentifier(detailDef, identifiers) } } else if ((definition.def as ModuleParDef).multitypeParam != null) { for (ModulePar p : (definition.def as ModuleParDef).multitypeParam.params) { for (ModuleParameter pa : p.list.params) { idExists = pa.name.checkIdentifier(identifiers) detailDef = pa idExists = pa.name.checkIdentifier(detailDef, identifiers) } } } } else if (definition.def instanceof FunctionDef) { idExists = (definition.def as FunctionDef).name.checkIdentifier(identifiers) detailDef = definition.def as FunctionDef idExists = (definition.def as FunctionDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TemplateDef) { idExists = (definition.def as TemplateDef).base.name.checkIdentifier(identifiers) detailDef = (definition.def as TemplateDef).base idExists = (definition.def as TemplateDef).base.name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof SignatureDef) { idExists = (definition.def as SignatureDef).name.checkIdentifier(identifiers) detailDef = definition.def as SignatureDef idExists = (definition.def as SignatureDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TestcaseDef) { idExists = (definition.def as TestcaseDef).name.checkIdentifier(identifiers) detailDef = definition.def as TestcaseDef idExists = (definition.def as TestcaseDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof AltstepDef) { idExists = (definition.def as AltstepDef).name.checkIdentifier(identifiers) detailDef = definition.def as AltstepDef idExists = (definition.def as AltstepDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof GroupDef) { idExists = (definition.def as GroupDef).name.checkIdentifier(identifiers) detailDef = definition.def as GroupDef idExists = (definition.def as GroupDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TypeDef) { val typeDef = definition.def as TypeDef if (typeDef.body.structured != null) { val struct = typeDef.body.structured if (struct.record != null && struct.record instanceof RecordDefNamed) { detailDef = struct.record as TTCN3Reference idExists = (struct.record as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.union != null && struct.union instanceof UnionDefNamed) { detailDef = struct.union as TTCN3Reference idExists = (struct.union as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.set != null && struct.set instanceof SetDefNamed) { detailDef = struct.set as TTCN3Reference idExists = (struct.set as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.recordOf != null && struct.recordOf instanceof RecordOfDefNamed) { detailDef = struct.recordOf as TTCN3Reference idExists = (struct.recordOf as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.setOf != null && struct.setOf instanceof SetOfDefNamed) { detailDef = struct.setOf as TTCN3Reference idExists = (struct.setOf as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.enumDef != null && struct.enumDef instanceof EnumDefNamed) { detailDef = struct.enumDef as TTCN3Reference idExists = (struct.enumDef as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.port != null) { detailDef = struct.port as TTCN3Reference idExists = (struct.port as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.component != null) { detailDef = struct.component as TTCN3Reference idExists = (struct.component as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } } else if (typeDef.body.sub != null) { if (typeDef.body.sub instanceof SubTypeDefNamed) { detailDef = typeDef.body.sub as TTCN3Reference idExists = (typeDef.body.sub as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } } } if (idExists) { statistics.incrementCountStyle val message = "Identifier \"" + detailDef.name + "\" on the module level has already been used in " + parentModule.name + "!" var message = "Identifier \"" + detailDef.name + "\" on the module level has already been used in " val size = identifiers.get(detailDef.name).size - 1 var i = 0; for (d : identifiers.get(detailDef.name)) { if (d != detailDef) { val INode node = NodeModelUtils.getNode(d) message += "<\"" + parentModule.name + ": " + node.startLine.toString + "\">" if (size > 1 && i < size - 1) { message += ", " } i++ } } message += "!" val INode node = NodeModelUtils.getNode(detailDef) warning( message, Loading @@ -631,12 +679,14 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } } private def boolean checkIdentifier(String name, ArrayList<String> ids) { private def boolean checkIdentifier(String name, TTCN3Reference definition, HashMap<String, List<TTCN3Reference>> ids) { var res = false if (ids.contains(name)) { if (ids.containsKey(name)) { ids.get(name).add(definition) res = true } else { ids.add(name) val list = newArrayList(definition) ids.put(name, list) } res } Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/TTCN3.xtext +1 −0 Original line number Diff line number Diff line Loading @@ -678,6 +678,7 @@ SubTypeDef: SubTypeDefNamed: type=Type name=IDENTIFIER array=ArrayDef? spec=SubTypeSpec?; // TODO: generate inheritance for named types! StructuredTypeDef: record=RecordDef | union=UnionDef | set=SetDef | recordOf=RecordOfDef | setOf=SetOfDef | enumDef=EnumDef | port=PortDef | component=ComponentDef; Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +67 −17 Original line number Diff line number Diff line Loading @@ -81,6 +81,7 @@ import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.xtext.EcoreUtil2.* import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.ExtFunctionDef import java.util.HashMap class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading @@ -88,7 +89,7 @@ class CheckDefinitionComeFirstParameter { } class CodeStyleValidator extends AbstractDeclarativeValidator { val static Map<String, ArrayList<String>> moduleLevelIdentifiersMap = new ConcurrentHashMap<String, ArrayList<String>>(); val static Map<String, HashMap<String, List<TTCN3Reference>>> moduleLevelIdentifiersMap = new ConcurrentHashMap<String, HashMap<String, List<TTCN3Reference>>>(); val ConfigTools configTools = ConfigTools.getInstance; var QualityCheckProfile activeProfile = configTools.selectedProfile as QualityCheckProfile final TTCN3StatisticsProvider statistics = TTCN3StatisticsProvider.getInstance Loading Loading @@ -565,7 +566,7 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { return; val parentModule = definition.findDesiredParent(TTCN3Module) var ArrayList<String> identifiers = newArrayList var HashMap<String, List<TTCN3Reference>> identifiers = newHashMap var idExists = false var TTCN3Reference detailDef = null Loading @@ -578,47 +579,94 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { if (definition.def instanceof ConstDef) { val constDefList = (definition.def as ConstDef).defs as ConstList for (SingleConstDef d : constDefList.list) { idExists = d.name.checkIdentifier(identifiers) detailDef = d idExists = d.name.checkIdentifier(detailDef, identifiers) } } else if (definition.def instanceof ModuleParDef) { if ((definition.def as ModuleParDef).param != null) { for (ModuleParameter p : (definition.def as ModuleParDef).param.list.params) { idExists = p.name.checkIdentifier(identifiers) detailDef = p idExists = p.name.checkIdentifier(detailDef, identifiers) } } else if ((definition.def as ModuleParDef).multitypeParam != null) { for (ModulePar p : (definition.def as ModuleParDef).multitypeParam.params) { for (ModuleParameter pa : p.list.params) { idExists = pa.name.checkIdentifier(identifiers) detailDef = pa idExists = pa.name.checkIdentifier(detailDef, identifiers) } } } } else if (definition.def instanceof FunctionDef) { idExists = (definition.def as FunctionDef).name.checkIdentifier(identifiers) detailDef = definition.def as FunctionDef idExists = (definition.def as FunctionDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TemplateDef) { idExists = (definition.def as TemplateDef).base.name.checkIdentifier(identifiers) detailDef = (definition.def as TemplateDef).base idExists = (definition.def as TemplateDef).base.name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof SignatureDef) { idExists = (definition.def as SignatureDef).name.checkIdentifier(identifiers) detailDef = definition.def as SignatureDef idExists = (definition.def as SignatureDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TestcaseDef) { idExists = (definition.def as TestcaseDef).name.checkIdentifier(identifiers) detailDef = definition.def as TestcaseDef idExists = (definition.def as TestcaseDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof AltstepDef) { idExists = (definition.def as AltstepDef).name.checkIdentifier(identifiers) detailDef = definition.def as AltstepDef idExists = (definition.def as AltstepDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof GroupDef) { idExists = (definition.def as GroupDef).name.checkIdentifier(identifiers) detailDef = definition.def as GroupDef idExists = (definition.def as GroupDef).name.checkIdentifier(detailDef, identifiers) } else if (definition.def instanceof TypeDef) { val typeDef = definition.def as TypeDef if (typeDef.body.structured != null) { val struct = typeDef.body.structured if (struct.record != null && struct.record instanceof RecordDefNamed) { detailDef = struct.record as TTCN3Reference idExists = (struct.record as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.union != null && struct.union instanceof UnionDefNamed) { detailDef = struct.union as TTCN3Reference idExists = (struct.union as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.set != null && struct.set instanceof SetDefNamed) { detailDef = struct.set as TTCN3Reference idExists = (struct.set as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.recordOf != null && struct.recordOf instanceof RecordOfDefNamed) { detailDef = struct.recordOf as TTCN3Reference idExists = (struct.recordOf as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.setOf != null && struct.setOf instanceof SetOfDefNamed) { detailDef = struct.setOf as TTCN3Reference idExists = (struct.setOf as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.enumDef != null && struct.enumDef instanceof EnumDefNamed) { detailDef = struct.enumDef as TTCN3Reference idExists = (struct.enumDef as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.port != null) { detailDef = struct.port as TTCN3Reference idExists = (struct.port as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } else if (struct.component != null) { detailDef = struct.component as TTCN3Reference idExists = (struct.component as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } } else if (typeDef.body.sub != null) { if (typeDef.body.sub instanceof SubTypeDefNamed) { detailDef = typeDef.body.sub as TTCN3Reference idExists = (typeDef.body.sub as TTCN3Reference).name.checkIdentifier(detailDef, identifiers) } } } if (idExists) { statistics.incrementCountStyle val message = "Identifier \"" + detailDef.name + "\" on the module level has already been used in " + parentModule.name + "!" var message = "Identifier \"" + detailDef.name + "\" on the module level has already been used in " val size = identifiers.get(detailDef.name).size - 1 var i = 0; for (d : identifiers.get(detailDef.name)) { if (d != detailDef) { val INode node = NodeModelUtils.getNode(d) message += "<\"" + parentModule.name + ": " + node.startLine.toString + "\">" if (size > 1 && i < size - 1) { message += ", " } i++ } } message += "!" val INode node = NodeModelUtils.getNode(detailDef) warning( message, Loading @@ -631,12 +679,14 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } } private def boolean checkIdentifier(String name, ArrayList<String> ids) { private def boolean checkIdentifier(String name, TTCN3Reference definition, HashMap<String, List<TTCN3Reference>> ids) { var res = false if (ids.contains(name)) { if (ids.containsKey(name)) { ids.get(name).add(definition) res = true } else { ids.add(name) val list = newArrayList(definition) ids.put(name, list) } res } Loading