Browse Source

Undo faulty optimization

Yentl Van Tendeloo 9 years ago
parent
commit
f9808780d3
1 changed files with 44 additions and 45 deletions
  1. 44 45
      bootstrap/conformance_scd.alc

+ 44 - 45
bootstrap/conformance_scd.alc

@@ -124,51 +124,50 @@ String function conformance_scd(model : Element):
 				if (bool_not(is_nominal_instance(model, dst_model, dst_metamodel))):
 					return "Destination of model edge not typed by source of type: " + model_name
 
-			if (dict_in(cardinalities, model_name)):
-				// Check cardinality for all of our edges
-				//
-				//      SLC..SUC     TLC..TUC
-				//   A  ---------------------> B
-				//
-				// First the incoming, so we are at B in the above figure
-				Integer lower_val
-				Integer upper_val
-				Integer instances
-
-				check_list = selectPossibleOutgoing(model, model_name, dict_keys(cardinalities))
-				while (0 < list_len(check_list)):
-					check_type = set_pop(check_list)
-					if (dict_in(cardinalities, check_type)):
-						// Cardinalities defined for this association, so check them
-						lower_val = cardinalities[check_type]["tlc"]
-						upper_val = cardinalities[check_type]["tuc"]
-						instances = list_len(allOutgoingAssociationInstances(model, model_name, check_type))
-						if (dict_in(cardinalities[check_type], "tlc")):
-							// A lower cardinality was defined at the target
-							if (integer_gt(cardinalities[check_type]["tlc"], instances)):
-								return "Lower cardinality violation for outgoing edge at " + model_name
-						if (dict_in(cardinalities[check_type], "tuc")):
-							// An upper cardinality was defined at the target
-							if (integer_lt(cardinalities[check_type]["tuc"], instances)):
-								return "Upper cardinality violation for outgoing edge at " + model_name
-
-				// Identical, but for outgoing, and thus for A in the figure
-				check_list = selectPossibleIncoming(model, model_name, dict_keys(cardinalities))
-				while (0 < list_len(check_list)):
-					check_type = set_pop(check_list)
-					if (dict_in(cardinalities, check_type)):
-						// Cardinalities defined for this association, so check them
-						lower_val = cardinalities[check_type]["slc"]
-						upper_val = cardinalities[check_type]["suc"]
-						instances = list_len(allIncomingAssociationInstances(model, model_name, check_type))
-						if (dict_in(cardinalities[check_type], "slc")):
-							// A lower cardinality was defined at the source
-							if (integer_gt(cardinalities[check_type]["slc"], instances)):
-								return "Lower cardinality violation for incoming edge at " + model_name
-						if (dict_in(cardinalities[check_type], "suc")):
-							// An upper cardinality was defined at the source
-							if (integer_lt(cardinalities[check_type]["suc"], instances)):
-								return "Upper cardinality violation for incoming edge at " + model_name
+			// Check cardinality for all of our edges
+			//
+			//      SLC..SUC     TLC..TUC
+			//   A  ---------------------> B
+			//
+			// First the incoming, so we are at B in the above figure
+			Integer lower_val
+			Integer upper_val
+			Integer instances
+
+			check_list = selectPossibleOutgoing(model, model_name, dict_keys(cardinalities))
+			while (0 < list_len(check_list)):
+				check_type = set_pop(check_list)
+				if (dict_in(cardinalities, check_type)):
+					// Cardinalities defined for this association, so check them
+					lower_val = cardinalities[check_type]["tlc"]
+					upper_val = cardinalities[check_type]["tuc"]
+					instances = list_len(allOutgoingAssociationInstances(model, model_name, check_type))
+					if (dict_in(cardinalities[check_type], "tlc")):
+						// A lower cardinality was defined at the target
+						if (integer_gt(cardinalities[check_type]["tlc"], instances)):
+							return "Lower cardinality violation for outgoing edge at " + model_name
+					if (dict_in(cardinalities[check_type], "tuc")):
+						// An upper cardinality was defined at the target
+						if (integer_lt(cardinalities[check_type]["tuc"], instances)):
+							return "Upper cardinality violation for outgoing edge at " + model_name
+
+			// Identical, but for outgoing, and thus for A in the figure
+			check_list = selectPossibleIncoming(model, model_name, dict_keys(cardinalities))
+			while (0 < list_len(check_list)):
+				check_type = set_pop(check_list)
+				if (dict_in(cardinalities, check_type)):
+					// Cardinalities defined for this association, so check them
+					lower_val = cardinalities[check_type]["slc"]
+					upper_val = cardinalities[check_type]["suc"]
+					instances = list_len(allIncomingAssociationInstances(model, model_name, check_type))
+					if (dict_in(cardinalities[check_type], "slc")):
+						// A lower cardinality was defined at the source
+						if (integer_gt(cardinalities[check_type]["slc"], instances)):
+							return "Lower cardinality violation for incoming edge at " + model_name
+					if (dict_in(cardinalities[check_type], "suc")):
+						// An upper cardinality was defined at the source
+						if (integer_lt(cardinalities[check_type]["suc"], instances)):
+							return "Upper cardinality violation for incoming edge at " + model_name
 
 			Element constraint_function
 			constraint_function = read_attribute(model["metamodel"], reverseKeyLookup(model["metamodel"]["model"], dict_read_node(model["type_mapping"], element)), "constraint")