Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +33 −10 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ import static extension de.ugoe.cs.swe.common.TTCN3ReferenceHelper.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.emf.ecore.util.EcoreUtil.* import static extension org.eclipse.xtext.EcoreUtil2.* import de.ugoe.cs.swe.tTCN3.NestedUnionDef class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading Loading @@ -1209,15 +1210,35 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { if (!activeProfile.checkNoUninitializedFieldsInTemplates) return; if (template.base.type.ref !== null) { var type = template.base.type.ref.head if (type instanceof RecordDefNamed) { var expr = template.body.simple.expr if (expr instanceof FieldExpressionList) { //get fields from referenced template //DONE: this seems to break things.. also for unions it has to be treated differently //DONE: get all fields in a unified way, also for nested -> factor out above //TODO: handle record of / set of? var type = getReferencedOrNestedTypeWithTail(template.base.type.ref) var fields = type.getFields if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) { } else { var referencedFields = new ArrayList<FieldReference>() //DONE: handle unions -> skip altogether? or separate warning? (new feature) referencedFields.addAll(expr.specs.map[it.fieldRef]) template.collectInheritedFieldSpecifications(referencedFields) checkNoUninitializedFieldsInTemplates(referencedFields, type, template.base.name, expr) checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr) } } else if (expr instanceof ArrayOrMixedExpression) { //no fields specified if (expr.list === null) { var type = getReferencedOrNestedTypeWithTail(template.base.type.ref) var fields = type.getFields if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) { } else { var referencedFields = new ArrayList<FieldReference>() //DONE: handle unions -> skip altogether? or separate warning? (new feature) template.collectInheritedFieldSpecifications(referencedFields) checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr) } } } } Loading Loading @@ -1253,8 +1274,9 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { for (single : variable.tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { //TODO: update based on above -> factor out! var referencedFields = expr.specs.map[it.fieldRef] checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) // checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) } } } Loading @@ -1275,7 +1297,8 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { var referencedFields = expr.specs.map[it.fieldRef] checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) //TODO: update based on above -> factor out! // checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) } } } Loading @@ -1283,8 +1306,8 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } protected def void checkNoUninitializedFieldsInTemplates(List<FieldReference> referencedFields, RecordDefNamed type, String template, FieldExpressionList expr) { for (field : type.body.defs) { protected def void checkNoUninitializedFieldsInTemplates(List<FieldReference> referencedFields, Iterable<FieldReference> fields, String template, EObject expr) { for (field : fields) { if (!referencedFields.contains(field)) { statistics.incrementCountStyle val message = "Field \""+field.name+"\" not initialised in template \""+template+"\"!" Loading Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +33 −10 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ import static extension de.ugoe.cs.swe.common.TTCN3ReferenceHelper.* import static extension de.ugoe.cs.swe.common.TTCN3ScopeHelper.* import static extension org.eclipse.emf.ecore.util.EcoreUtil.* import static extension org.eclipse.xtext.EcoreUtil2.* import de.ugoe.cs.swe.tTCN3.NestedUnionDef class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading Loading @@ -1209,15 +1210,35 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { if (!activeProfile.checkNoUninitializedFieldsInTemplates) return; if (template.base.type.ref !== null) { var type = template.base.type.ref.head if (type instanceof RecordDefNamed) { var expr = template.body.simple.expr if (expr instanceof FieldExpressionList) { //get fields from referenced template //DONE: this seems to break things.. also for unions it has to be treated differently //DONE: get all fields in a unified way, also for nested -> factor out above //TODO: handle record of / set of? var type = getReferencedOrNestedTypeWithTail(template.base.type.ref) var fields = type.getFields if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) { } else { var referencedFields = new ArrayList<FieldReference>() //DONE: handle unions -> skip altogether? or separate warning? (new feature) referencedFields.addAll(expr.specs.map[it.fieldRef]) template.collectInheritedFieldSpecifications(referencedFields) checkNoUninitializedFieldsInTemplates(referencedFields, type, template.base.name, expr) checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr) } } else if (expr instanceof ArrayOrMixedExpression) { //no fields specified if (expr.list === null) { var type = getReferencedOrNestedTypeWithTail(template.base.type.ref) var fields = type.getFields if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) { } else { var referencedFields = new ArrayList<FieldReference>() //DONE: handle unions -> skip altogether? or separate warning? (new feature) template.collectInheritedFieldSpecifications(referencedFields) checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr) } } } } Loading Loading @@ -1253,8 +1274,9 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { for (single : variable.tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { //TODO: update based on above -> factor out! var referencedFields = expr.specs.map[it.fieldRef] checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) // checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) } } } Loading @@ -1275,7 +1297,8 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { var referencedFields = expr.specs.map[it.fieldRef] checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) //TODO: update based on above -> factor out! // checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr) } } } Loading @@ -1283,8 +1306,8 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { } protected def void checkNoUninitializedFieldsInTemplates(List<FieldReference> referencedFields, RecordDefNamed type, String template, FieldExpressionList expr) { for (field : type.body.defs) { protected def void checkNoUninitializedFieldsInTemplates(List<FieldReference> referencedFields, Iterable<FieldReference> fields, String template, EObject expr) { for (field : fields) { if (!referencedFields.contains(field)) { statistics.incrementCountStyle val message = "Field \""+field.name+"\" not initialised in template \""+template+"\"!" Loading