Loading de.ugoe.cs.swe.T3Q/config/t3q-tf160-latest-next-new-features.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ <!-- <projectExtension>t3p</projectExtension> --> <ignoredResourceRegExp>((.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)|(.*[/\\]Common[/\\](HTTP)[/\\]uri.*[.]ttcn)|(.*[/\\]LTE_A_R12[/\\](D2D_ProSe)[/\\]urn.*[.]ttcn)|(.*[/\\]IMS[/\\]XCAP_XSD[/\\].*[.]ttcn)|(.*[/\\]MCX[/\\]CommonXSD[/\\].*[.]ttcn)|(.*[/\\].*[/\\][Cc]ommon[/\\]TestcaseProperties.*[.]ttcn))</ignoredResourceRegExp> <!-- <settingRecursiveProcessing>true</settingRecursiveProcessing> --> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions --> <string>enumerated</string> Loading Loading @@ -197,6 +198,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -314,6 +316,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading de.ugoe.cs.swe.T3Q/config/t3q-tf160-latest-next.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ <!-- <projectExtension>t3p</projectExtension> --> <ignoredResourceRegExp>((.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)|(.*[/\\]Common[/\\](HTTP)[/\\]uri.*[.]ttcn)|(.*[/\\]LTE_A_R12[/\\](D2D_ProSe)[/\\]urn.*[.]ttcn)|(.*[/\\]IMS[/\\]XCAP_XSD[/\\].*[.]ttcn)|(.*[/\\]MCX[/\\]CommonXSD[/\\].*[.]ttcn)|(.*[/\\].*[/\\][Cc]ommon[/\\]TestcaseProperties.*[.]ttcn))</ignoredResourceRegExp> <!-- <settingRecursiveProcessing>true</settingRecursiveProcessing> --> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions --> <string>enumerated</string> Loading Loading @@ -197,6 +198,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -314,6 +316,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading de.ugoe.cs.swe.T3Q/config/t3q.cfg +3 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- Loading Loading @@ -194,6 +195,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -311,6 +313,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +91 −18 Original line number Diff line number Diff line Loading @@ -12,12 +12,16 @@ import de.ugoe.cs.swe.scoping.TTCN3GlobalScopeProvider import de.ugoe.cs.swe.tTCN3.AltConstruct import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepInstance import de.ugoe.cs.swe.tTCN3.ArrayElementExpressionList import de.ugoe.cs.swe.tTCN3.ArrayExpression import de.ugoe.cs.swe.tTCN3.Assignment import de.ugoe.cs.swe.tTCN3.BaseTemplate import de.ugoe.cs.swe.tTCN3.ComponentDef import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.ExtFunctionDef import de.ugoe.cs.swe.tTCN3.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.FieldExpressionList import de.ugoe.cs.swe.tTCN3.FormalPortPar import de.ugoe.cs.swe.tTCN3.FormalTemplatePar Loading @@ -35,25 +39,33 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinition 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.OpCall import de.ugoe.cs.swe.tTCN3.PermutationMatch import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.PredefinedValue 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.ReferencedValue import de.ugoe.cs.swe.tTCN3.RestrictedTemplate import de.ugoe.cs.swe.tTCN3.RunsOnSpec 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.SingleExpression import de.ugoe.cs.swe.tTCN3.SingleTempVarInstance import de.ugoe.cs.swe.tTCN3.SingleTemplateExpression 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.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TTCN3Package import de.ugoe.cs.swe.tTCN3.TTCN3Reference import de.ugoe.cs.swe.tTCN3.TempVarList import de.ugoe.cs.swe.tTCN3.TemplateBody import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TimerRefOrAll Loading @@ -61,9 +73,12 @@ 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.UnionFieldDef import de.ugoe.cs.swe.tTCN3.Value import de.ugoe.cs.swe.tTCN3.ValueofOp import de.ugoe.cs.swe.tTCN3.VarInstance import de.ugoe.cs.swe.tTCN3.VarList import de.ugoe.cs.swe.tTCN3.VariableRef import java.util.ArrayList import java.util.HashMap import java.util.HashSet Loading @@ -75,6 +90,8 @@ import java.util.regex.Matcher import java.util.regex.Pattern import org.eclipse.emf.ecore.EClass import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference import org.eclipse.xtext.EcoreUtil2.ElementReferenceAcceptor import org.eclipse.xtext.nodemodel.INode import org.eclipse.xtext.nodemodel.util.NodeModelUtils import org.eclipse.xtext.scoping.IGlobalScopeProvider Loading @@ -88,23 +105,6 @@ 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 org.eclipse.xtext.EcoreUtil2.ElementReferenceAcceptor import org.eclipse.emf.ecore.EReference import de.ugoe.cs.swe.tTCN3.StructFieldDef import de.ugoe.cs.swe.tTCN3.OpCall import de.ugoe.cs.swe.tTCN3.UnionFieldDef import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.ReferencedValue import de.ugoe.cs.swe.tTCN3.Assignment import de.ugoe.cs.swe.tTCN3.VarInstance import de.ugoe.cs.swe.tTCN3.ArrayElementExpressionList import de.ugoe.cs.swe.tTCN3.ArrayExpression import de.ugoe.cs.swe.tTCN3.SingleExpression import de.ugoe.cs.swe.tTCN3.RestrictedTemplate import de.ugoe.cs.swe.tTCN3.TemplateBody import de.ugoe.cs.swe.tTCN3.SingleTemplateExpression import de.ugoe.cs.swe.tTCN3.VariableRef class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading Loading @@ -1171,9 +1171,82 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { return !found } @Check def checkNoUninitializedFieldsInTemplates(TemplateDef template) { //TODO: also for variables and parameters? other expressions? operations? -> only for declared templates for now 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) { checkUnreferencedFields(expr, type, template.base.name) } } } } @Check def checkNoUninitializedFieldsInTemplates(VarInstance variable) { //TODO: also for variables and parameters? other expressions? operations? -> deactivated for now, pending clarification if (true) return; if (variable.type.ref !== null) { var type = variable.type.ref.head if (type instanceof RecordDefNamed) { for (single : variable.tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { checkUnreferencedFields(expr, type, single.name) } } } } } @Check def checkNoUninitializedFieldsInTemplates(Assignment assignment) { //TODO: also for variables and parameters? other expressions? operations? -> deactivated for now, pending clarification if (true) return; var variable = assignment.ref.ref.head.target.eContainer.eContainer var type = (variable as VarInstance).type.ref.head if (type !== null) { if (type instanceof RecordDefNamed) { for (single : (variable as VarInstance).tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { checkUnreferencedFields(expr, type, single.name) } } } } } protected def void checkUnreferencedFields(FieldExpressionList expr, RecordDefNamed type, String template) { var referencedFields = expr.specs.map[it.fieldRef] for (field : type.body.defs) { if (!referencedFields.contains(field)) { statistics.incrementCountStyle val message = "Field \""+field.name+"\" not initialised in template \""+template+"\"!" val INode node = NodeModelUtils.getNode(expr) warning( message, null, MessageClass.STYLE.toString, node.startLine.toString, node.endLine.toString, "6.16, " + MiscTools.getMethodName() ); } } } @Check def checkNoValueOfForValues(ValueofOp templateOp) { //TODO: add property, update version if (!activeProfile.checkNoValueOfForValues) return; Loading de.ugoe.cs.swe.TTCN3Configuration/src/de/ugoe/cs/swe/TTCN3Configuration/QualityCheckProfile.java +10 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class QualityCheckProfile extends ConfigurationProfile { private boolean checkNoUnusedImports = true; private boolean checkNoUnusedFormalParameters = true; private boolean checkNoUnusedLocalDefinitions = true; private boolean checkNoUninitializedFieldsInTemplates = true; private boolean checkNoUninitialisedVariables = true; private String[] checkNoUninitialisedVariablesExclude = {"enumerated", "union", "record", "record of", "set", "set of"}; private boolean checkNoLiterals = true; Loading Loading @@ -629,6 +630,14 @@ public class QualityCheckProfile extends ConfigurationProfile { this.checkNoAnyValueOrNoneInListValues = checkNoAnyValueOrNoneInListValues; } public boolean isCheckNoUninitializedFieldsInTemplates() { return checkNoUninitializedFieldsInTemplates; } public void setCheckNoUninitializedFieldsInTemplates(boolean checkNoUninitializedFieldsInTemplates) { this.checkNoUninitializedFieldsInTemplates = checkNoUninitializedFieldsInTemplates; } } Loading
de.ugoe.cs.swe.T3Q/config/t3q-tf160-latest-next-new-features.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ <!-- <projectExtension>t3p</projectExtension> --> <ignoredResourceRegExp>((.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)|(.*[/\\]Common[/\\](HTTP)[/\\]uri.*[.]ttcn)|(.*[/\\]LTE_A_R12[/\\](D2D_ProSe)[/\\]urn.*[.]ttcn)|(.*[/\\]IMS[/\\]XCAP_XSD[/\\].*[.]ttcn)|(.*[/\\]MCX[/\\]CommonXSD[/\\].*[.]ttcn)|(.*[/\\].*[/\\][Cc]ommon[/\\]TestcaseProperties.*[.]ttcn))</ignoredResourceRegExp> <!-- <settingRecursiveProcessing>true</settingRecursiveProcessing> --> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions --> <string>enumerated</string> Loading Loading @@ -197,6 +198,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -314,6 +316,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading
de.ugoe.cs.swe.T3Q/config/t3q-tf160-latest-next.xml +3 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ <!-- <projectExtension>t3p</projectExtension> --> <ignoredResourceRegExp>((.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)|(.*[/\\]Common[/\\](HTTP)[/\\]uri.*[.]ttcn)|(.*[/\\]LTE_A_R12[/\\](D2D_ProSe)[/\\]urn.*[.]ttcn)|(.*[/\\]IMS[/\\]XCAP_XSD[/\\].*[.]ttcn)|(.*[/\\]MCX[/\\]CommonXSD[/\\].*[.]ttcn)|(.*[/\\].*[/\\][Cc]ommon[/\\]TestcaseProperties.*[.]ttcn))</ignoredResourceRegExp> <!-- <settingRecursiveProcessing>true</settingRecursiveProcessing> --> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions --> <string>enumerated</string> Loading Loading @@ -197,6 +198,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -314,6 +316,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading
de.ugoe.cs.swe.T3Q/config/t3q.cfg +3 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <!-- Loading Loading @@ -194,6 +195,7 @@ <checkNoUnusedImports>true</checkNoUnusedImports> <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading Loading @@ -311,6 +313,7 @@ <checkNoUnusedImports>false</checkNoUnusedImports> <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters> <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions> <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates> <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables> <checkNoUninitialisedVariablesExclude> <string>enumerated</string> Loading
de.ugoe.cs.swe.TTCN3/src/de/ugoe/cs/swe/validation/CodeStyleValidator.xtend +91 −18 Original line number Diff line number Diff line Loading @@ -12,12 +12,16 @@ import de.ugoe.cs.swe.scoping.TTCN3GlobalScopeProvider import de.ugoe.cs.swe.tTCN3.AltConstruct import de.ugoe.cs.swe.tTCN3.AltstepDef import de.ugoe.cs.swe.tTCN3.AltstepInstance import de.ugoe.cs.swe.tTCN3.ArrayElementExpressionList import de.ugoe.cs.swe.tTCN3.ArrayExpression import de.ugoe.cs.swe.tTCN3.Assignment import de.ugoe.cs.swe.tTCN3.BaseTemplate import de.ugoe.cs.swe.tTCN3.ComponentDef import de.ugoe.cs.swe.tTCN3.ConstDef import de.ugoe.cs.swe.tTCN3.ConstList import de.ugoe.cs.swe.tTCN3.EnumDefNamed import de.ugoe.cs.swe.tTCN3.ExtFunctionDef import de.ugoe.cs.swe.tTCN3.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.FieldExpressionList import de.ugoe.cs.swe.tTCN3.FormalPortPar import de.ugoe.cs.swe.tTCN3.FormalTemplatePar Loading @@ -35,25 +39,33 @@ import de.ugoe.cs.swe.tTCN3.ModuleDefinition 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.OpCall import de.ugoe.cs.swe.tTCN3.PermutationMatch import de.ugoe.cs.swe.tTCN3.PortDef import de.ugoe.cs.swe.tTCN3.PortElement import de.ugoe.cs.swe.tTCN3.PredefinedValue 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.ReferencedValue import de.ugoe.cs.swe.tTCN3.RestrictedTemplate import de.ugoe.cs.swe.tTCN3.RunsOnSpec 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.SingleExpression import de.ugoe.cs.swe.tTCN3.SingleTempVarInstance import de.ugoe.cs.swe.tTCN3.SingleTemplateExpression 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.SubTypeDefNamed import de.ugoe.cs.swe.tTCN3.TTCN3Module import de.ugoe.cs.swe.tTCN3.TTCN3Package import de.ugoe.cs.swe.tTCN3.TTCN3Reference import de.ugoe.cs.swe.tTCN3.TempVarList import de.ugoe.cs.swe.tTCN3.TemplateBody import de.ugoe.cs.swe.tTCN3.TemplateDef import de.ugoe.cs.swe.tTCN3.TestcaseDef import de.ugoe.cs.swe.tTCN3.TimerRefOrAll Loading @@ -61,9 +73,12 @@ 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.UnionFieldDef import de.ugoe.cs.swe.tTCN3.Value import de.ugoe.cs.swe.tTCN3.ValueofOp import de.ugoe.cs.swe.tTCN3.VarInstance import de.ugoe.cs.swe.tTCN3.VarList import de.ugoe.cs.swe.tTCN3.VariableRef import java.util.ArrayList import java.util.HashMap import java.util.HashSet Loading @@ -75,6 +90,8 @@ import java.util.regex.Matcher import java.util.regex.Pattern import org.eclipse.emf.ecore.EClass import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference import org.eclipse.xtext.EcoreUtil2.ElementReferenceAcceptor import org.eclipse.xtext.nodemodel.INode import org.eclipse.xtext.nodemodel.util.NodeModelUtils import org.eclipse.xtext.scoping.IGlobalScopeProvider Loading @@ -88,23 +105,6 @@ 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 org.eclipse.xtext.EcoreUtil2.ElementReferenceAcceptor import org.eclipse.emf.ecore.EReference import de.ugoe.cs.swe.tTCN3.StructFieldDef import de.ugoe.cs.swe.tTCN3.OpCall import de.ugoe.cs.swe.tTCN3.UnionFieldDef import de.ugoe.cs.swe.tTCN3.RefValue import de.ugoe.cs.swe.tTCN3.ExtendedFieldReference import de.ugoe.cs.swe.tTCN3.ReferencedValue import de.ugoe.cs.swe.tTCN3.Assignment import de.ugoe.cs.swe.tTCN3.VarInstance import de.ugoe.cs.swe.tTCN3.ArrayElementExpressionList import de.ugoe.cs.swe.tTCN3.ArrayExpression import de.ugoe.cs.swe.tTCN3.SingleExpression import de.ugoe.cs.swe.tTCN3.RestrictedTemplate import de.ugoe.cs.swe.tTCN3.TemplateBody import de.ugoe.cs.swe.tTCN3.SingleTemplateExpression import de.ugoe.cs.swe.tTCN3.VariableRef class CheckDefinitionComeFirstParameter { public boolean hasOtherDefinitions Loading Loading @@ -1171,9 +1171,82 @@ class CodeStyleValidator extends AbstractDeclarativeValidator { return !found } @Check def checkNoUninitializedFieldsInTemplates(TemplateDef template) { //TODO: also for variables and parameters? other expressions? operations? -> only for declared templates for now 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) { checkUnreferencedFields(expr, type, template.base.name) } } } } @Check def checkNoUninitializedFieldsInTemplates(VarInstance variable) { //TODO: also for variables and parameters? other expressions? operations? -> deactivated for now, pending clarification if (true) return; if (variable.type.ref !== null) { var type = variable.type.ref.head if (type instanceof RecordDefNamed) { for (single : variable.tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { checkUnreferencedFields(expr, type, single.name) } } } } } @Check def checkNoUninitializedFieldsInTemplates(Assignment assignment) { //TODO: also for variables and parameters? other expressions? operations? -> deactivated for now, pending clarification if (true) return; var variable = assignment.ref.ref.head.target.eContainer.eContainer var type = (variable as VarInstance).type.ref.head if (type !== null) { if (type instanceof RecordDefNamed) { for (single : (variable as VarInstance).tempList.variables) { var expr = single.template.simple.expr if (expr instanceof FieldExpressionList) { checkUnreferencedFields(expr, type, single.name) } } } } } protected def void checkUnreferencedFields(FieldExpressionList expr, RecordDefNamed type, String template) { var referencedFields = expr.specs.map[it.fieldRef] for (field : type.body.defs) { if (!referencedFields.contains(field)) { statistics.incrementCountStyle val message = "Field \""+field.name+"\" not initialised in template \""+template+"\"!" val INode node = NodeModelUtils.getNode(expr) warning( message, null, MessageClass.STYLE.toString, node.startLine.toString, node.endLine.toString, "6.16, " + MiscTools.getMethodName() ); } } } @Check def checkNoValueOfForValues(ValueofOp templateOp) { //TODO: add property, update version if (!activeProfile.checkNoValueOfForValues) return; Loading
de.ugoe.cs.swe.TTCN3Configuration/src/de/ugoe/cs/swe/TTCN3Configuration/QualityCheckProfile.java +10 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ public class QualityCheckProfile extends ConfigurationProfile { private boolean checkNoUnusedImports = true; private boolean checkNoUnusedFormalParameters = true; private boolean checkNoUnusedLocalDefinitions = true; private boolean checkNoUninitializedFieldsInTemplates = true; private boolean checkNoUninitialisedVariables = true; private String[] checkNoUninitialisedVariablesExclude = {"enumerated", "union", "record", "record of", "set", "set of"}; private boolean checkNoLiterals = true; Loading Loading @@ -629,6 +630,14 @@ public class QualityCheckProfile extends ConfigurationProfile { this.checkNoAnyValueOrNoneInListValues = checkNoAnyValueOrNoneInListValues; } public boolean isCheckNoUninitializedFieldsInTemplates() { return checkNoUninitializedFieldsInTemplates; } public void setCheckNoUninitializedFieldsInTemplates(boolean checkNoUninitializedFieldsInTemplates) { this.checkNoUninitializedFieldsInTemplates = checkNoUninitializedFieldsInTemplates; } }