Commit ced71b28 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

Merge branch 'dev' into 'master'

+ added checking of fields in base templates in case of modified templates,...

See merge request swe/tools/t3tools/t3q!7
parents e1ad9545 8927b6e6
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -2,12 +2,13 @@
  <ConfigurationProfiles>
    <QualityCheckProfile>
      <profileName>stf160Profile</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <!--  <resourceExtensionsRegExp>ttcn|ttcn3|3mp</resourceExtensionsRegExp> -->
      <!--    <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>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>  <!--  to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions   -->
        <string>enumerated</string>
@@ -144,7 +145,7 @@
    </QualityCheckProfile>
    <QualityCheckProfile>
      <profileName>defaultProfile</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <ignoredResourceRegExp>(.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)</ignoredResourceRegExp>
      <settingAbortOnError>true</settingAbortOnError>
      <loggingConfiguration>
@@ -199,6 +200,7 @@
      <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters>
      <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions>
      <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>
        <string>enumerated</string>
@@ -264,7 +266,7 @@
    </QualityCheckProfile>
    <QualityCheckProfile>
      <profileName>nothing</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <ignoredResourceRegExp>(.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)</ignoredResourceRegExp>
      <settingAbortOnError>true</settingAbortOnError>
      <loggingConfiguration>
@@ -317,6 +319,7 @@
      <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters>
      <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions>
      <checkNoUninitializedFieldsInTemplates>true</checkNoUninitializedFieldsInTemplates>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>
        <string>enumerated</string>
+6 −3
Original line number Diff line number Diff line
@@ -2,12 +2,13 @@
  <ConfigurationProfiles>
    <QualityCheckProfile>
      <profileName>stf160Profile</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <!--  <resourceExtensionsRegExp>ttcn|ttcn3|3mp</resourceExtensionsRegExp> -->
      <!--    <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>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>false</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>  <!--  to be discarded if checkNoUninitialisedVariables is true. If list is empty, no restrictions   -->
        <string>enumerated</string>
@@ -144,7 +145,7 @@
    </QualityCheckProfile>
    <QualityCheckProfile>
      <profileName>defaultProfile</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <ignoredResourceRegExp>(.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)</ignoredResourceRegExp>
      <settingAbortOnError>true</settingAbortOnError>
      <loggingConfiguration>
@@ -199,6 +200,7 @@
      <checkNoUnusedFormalParameters>true</checkNoUnusedFormalParameters>
      <checkNoUnusedLocalDefinitions>true</checkNoUnusedLocalDefinitions>
      <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>
        <string>enumerated</string>
@@ -264,7 +266,7 @@
    </QualityCheckProfile>
    <QualityCheckProfile>
      <profileName>nothing</profileName>
      <profileVersion>v2.1.0b2</profileVersion>
      <profileVersion>v2.1.0b3</profileVersion>
      <ignoredResourceRegExp>(.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn)</ignoredResourceRegExp>
      <settingAbortOnError>true</settingAbortOnError>
      <loggingConfiguration>
@@ -317,6 +319,7 @@
      <checkNoUnusedFormalParameters>false</checkNoUnusedFormalParameters>
      <checkNoUnusedLocalDefinitions>false</checkNoUnusedLocalDefinitions>
      <checkNoUninitializedFieldsInTemplates>false</checkNoUninitializedFieldsInTemplates>
      <checkNoUninitializedFieldsInTemplatesRecursion>false</checkNoUninitializedFieldsInTemplatesRecursion>
      <checkNoUninitialisedVariables>true</checkNoUninitialisedVariables>
      <checkNoUninitialisedVariablesExclude>
        <string>enumerated</string>
+2 −2
Original line number Diff line number Diff line
@@ -32,8 +32,8 @@ import de.ugoe.cs.swe.scoping.TTCN3GlobalScopeProvider;

public class T3Q {
	//TODO: externalise meta-data
	private static String versionNumber = "v2.1.0b2";
	private static String supportedTTCN3Version = "4.8.1";
	private static String versionNumber = "v2.1.0b3";
	private static String supportedTTCN3Version = "4.10.1";
	// set during automated server builds -> no longer displayed or used..
	private static String buildStamp = "---BUILD_STAMP---";
	public static QualityCheckProfile activeProfile = null;
+36 −11
Original line number Diff line number Diff line
@@ -16,16 +16,20 @@ import de.ugoe.cs.swe.tTCN3.ArrayOrMixedExpression
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.CompoundExpression
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.FieldReference
import de.ugoe.cs.swe.tTCN3.FormalTemplatePar
import de.ugoe.cs.swe.tTCN3.FormalValuePar
import de.ugoe.cs.swe.tTCN3.FunctionBodyDef
import de.ugoe.cs.swe.tTCN3.FunctionDef
import de.ugoe.cs.swe.tTCN3.FunctionInstance
import de.ugoe.cs.swe.tTCN3.FunctionStatement
import de.ugoe.cs.swe.tTCN3.GotoStatement
import de.ugoe.cs.swe.tTCN3.GroupDef
import de.ugoe.cs.swe.tTCN3.ImportDef
@@ -62,6 +66,7 @@ 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.TemplateDef
import de.ugoe.cs.swe.tTCN3.TemplateInstance
import de.ugoe.cs.swe.tTCN3.TestcaseDef
import de.ugoe.cs.swe.tTCN3.TimerRefOrAll
import de.ugoe.cs.swe.tTCN3.TimerRefOrAny
@@ -70,10 +75,11 @@ 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.ValueRef
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.ValueRef
import de.ugoe.cs.swe.tTCN3.impl.ArrayOrMixedExpressionImpl
import java.util.ArrayList
import java.util.HashMap
import java.util.HashSet
@@ -100,11 +106,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 de.ugoe.cs.swe.tTCN3.TemplateInstance
import de.ugoe.cs.swe.tTCN3.FunctionBodyDef
import de.ugoe.cs.swe.tTCN3.FunctionStatement
import de.ugoe.cs.swe.tTCN3.CompoundExpression
import de.ugoe.cs.swe.tTCN3.impl.ArrayOrMixedExpressionImpl

class CheckDefinitionComeFirstParameter {
	public boolean hasOtherDefinitions
@@ -1206,8 +1207,29 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
			if (type instanceof RecordDefNamed) {
				var expr = template.body.simple.expr
				if (expr instanceof FieldExpressionList) {
					checkUnreferencedFields(expr, type, template.base.name)
					//get fields from referenced template
					var referencedFields = new ArrayList<FieldReference>()
					referencedFields.addAll(expr.specs.map[it.fieldRef])
					template.collectInheritedFieldSpecifications(referencedFields)
					checkNoUninitializedFieldsInTemplates(referencedFields, type, template.base.name, expr)
				}
			}
		}
	}
	
	protected def void collectInheritedFieldSpecifications(TemplateDef template, ArrayList<FieldReference> referencedFields) {
		if (template.derived !== null) {
			//TODO: check same type?
			//TODO: check type, further derivation?
			var baseTemplate = (template.derived.template.eContainer as TemplateDef)
			var derivedExpr = baseTemplate.body.simple.expr
			if (derivedExpr instanceof FieldExpressionList) {
				referencedFields.addAll(derivedExpr.specs.map[it.fieldRef])
			}
			//TODO: make optional
		if (activeProfile.checkNoUninitializedFieldsInTemplatesRecursion)
			if (baseTemplate.derived !== null) {
				baseTemplate.collectInheritedFieldSpecifications(referencedFields)
			}
		}
	}
@@ -1220,11 +1242,13 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
		
		if (variable.type.ref !== null) {
			var type = variable.type.ref.head
			//TODO: support set as well?
			if (type instanceof RecordDefNamed) {
				for (single : variable.tempList.variables) {
					var expr = single.template.simple.expr
					if (expr instanceof FieldExpressionList) {
						checkUnreferencedFields(expr, type, single.name)
						var referencedFields = expr.specs.map[it.fieldRef]
						checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr)
					}
				}
			}
@@ -1239,11 +1263,13 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
		var variable = assignment.ref.ref.head.target.eContainer.eContainer
		var type = (variable as VarInstance).type.ref.head
		if (type !== null) {
			//TODO: support set as well?
			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)
						var referencedFields = expr.specs.map[it.fieldRef]
						checkNoUninitializedFieldsInTemplates(referencedFields, type, single.name, expr)
					}
				}
			}
@@ -1251,8 +1277,7 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
	}

	
	protected def void checkUnreferencedFields(FieldExpressionList expr, RecordDefNamed type, String template) {
		var referencedFields = expr.specs.map[it.fieldRef]
	protected def void checkNoUninitializedFieldsInTemplates(List<FieldReference> referencedFields, RecordDefNamed type, String template, FieldExpressionList expr) {
		for (field : type.body.defs) {
			if (!referencedFields.contains(field)) {
				statistics.incrementCountStyle
+9 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ public class QualityCheckProfile extends ConfigurationProfile {
	private boolean checkNoUnusedFormalParameters = true;
	private boolean checkNoUnusedLocalDefinitions = true;
    private boolean checkNoUninitializedFieldsInTemplates = true;
    private boolean checkNoUninitializedFieldsInTemplatesRecursion = false;
    private boolean checkNoUninitialisedVariables = true;
	private String[] checkNoUninitialisedVariablesExclude = {"enumerated", "union", "record", "record of", "set", "set of"};
	private boolean checkNoLiterals = true;
@@ -638,6 +639,14 @@ public class QualityCheckProfile extends ConfigurationProfile {
		this.checkNoUninitializedFieldsInTemplates = checkNoUninitializedFieldsInTemplates;
	}

	public boolean isCheckNoUninitializedFieldsInTemplatesRecursion() {
		return checkNoUninitializedFieldsInTemplatesRecursion;
	}

	public void setCheckNoUninitializedFieldsInTemplatesRecursion(boolean checkNoUninitializedFieldsInTemplatesRecursion) {
		this.checkNoUninitializedFieldsInTemplatesRecursion = checkNoUninitializedFieldsInTemplatesRecursion;
	}

	

}