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

* cleanup for #8, refinements for #31

parent 289fb5cf
Loading
Loading
Loading
Loading
+15 −77
Original line number Diff line number Diff line
@@ -1214,16 +1214,23 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
		if (!activeProfile.checkNoZeroOrMultipleFieldsInUnionTemplates)
			return;
		if (template.base.type.ref !== null) {
			var type = getReferencedOrNestedTypeWithTail(template.base.type.ref)
			if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) {
			//skip omit templates
			var expr = template.body.simple.expr
			if (expr instanceof Value) {
				if (expr.predef !== null) {
					if (expr.predef.omit !== null) {
						return
					}
				}
			}
			var type = getReferencedOrNestedTypeWithTail(template.base.type.ref)
			var originalType = type
			if (type instanceof ReferencedType) {
				originalType = findOriginalType(type)
			}
			
			if (originalType instanceof NestedUnionDef || originalType instanceof UnionDefNamed) {
				var guard = new Guard()
//				if (expr instanceof OpCall) {
//					var ref = expr.function.ref
//					if (!(ref instanceof BaseTemplate)) {
//						guard.stop = true
//					}
//				}
				var referencedFields = new ArrayList<FieldReference>()
				template.collectAssignedFieldSpecifications(referencedFields, true, guard)
				if (!guard.stop) {
@@ -1299,52 +1306,6 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
					checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr)
				}
			}

//			var expr = template.body.simple.expr
//			if (expr instanceof FieldExpressionList) {
//				//DONE: this seems to break things.. also for unions it has to be treated differently
//				if (type instanceof NestedUnionDef || type instanceof UnionDefNamed) {
//					
//				} else {
//					//DONE: handle unions -> skip altogether? or separate warning? (new feature)
//					referencedFields.addAll(expr.specs.map[it.fieldRef])
//					//DONE: handle fields of assigned template -> below
//					//TODO: what if modified template is assigned?
//					if (template.derived !== null) {
//						template.collectInheritedFieldSpecifications(referencedFields)
//					}
//					checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr)
//				}
//			} else if (expr instanceof OpCall) {
//				//assigned to another template
//				var type = getReferencedOrNestedTypeWithTail(template.base.type.ref)
//				var fields = type.getFields
//				var ref = expr.function.ref
//				if (ref instanceof BaseTemplate) {
//					var assigned = ref.eContainer
//					if (assigned instanceof TemplateDef) {
//						var referencedFields = new ArrayList<FieldReference>()
//						assigned.collectAssignedFieldSpecifications(referencedFields)
//						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)
//						if (template.derived !== null) {
//							template.collectInheritedFieldSpecifications(referencedFields)
//						}
//						checkNoUninitializedFieldsInTemplates(referencedFields, fields, template.base.name, expr)
//					}
//				}
//			}
		}
	}

@@ -1406,29 +1367,6 @@ class CodeStyleValidator extends AbstractDeclarativeValidator {
		}
	}
	
//	protected def void collectInheritedFieldSpecifications(TemplateDef template, ArrayList<FieldReference> referencedFields) {
//		//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])
//		} else if (derivedExpr instanceof OpCall) {
//			var ref = derivedExpr.function.ref
//			if (ref instanceof BaseTemplate) {
//				var assigned = ref.eContainer
//				if (assigned instanceof TemplateDef) {
//					assigned.collectAssignedFieldSpecifications(referencedFields)
//				}
//			}
//		}
//		if (activeProfile.checkNoUninitializedFieldsInTemplatesRecursion) {
//			if (baseTemplate.derived !== null) {
//				baseTemplate.collectInheritedFieldSpecifications(referencedFields)
//			}
//		}
//	}

	@Check
	def checkNoUninitializedFieldsInTemplates(VarInstance variable) {
		//TODO: also for variables and parameters? other expressions? operations? -> deactivated for now, pending clarification