- final Map<StatementDefinition, Integer> validatedMap = new HashMap<>();
- for (Entry<?, ?> entry : stmtDefMap.entrySet()) {
- final StatementDefinition key = (StatementDefinition) entry.getKey();
- if (!cardinalityMap.containsKey(key)) {
- if (ctx.getFromNamespace(ExtensionNamespace.class, key.getStatementName()) != null) {
- continue;
+ // Mark all mandatory statements as not present. We are using a Map instead of a Set, as it provides us with
+ // explicit value in case of failure (which is not important) and a more efficient instantiation performance
+ // (which is important).
+ final Map<StatementDefinition, Cardinality> missingMandatory = new HashMap<>(mandatoryStatements);
+
+ // Iterate over all statements
+ for (Entry<StatementDefinition, Counter> entry : stmtCounts.entrySet()) {
+ final StatementDefinition key = entry.getKey();
+ final Cardinality cardinality = cardinalityMap.get(key);
+ final int value = entry.getValue().getValue();
+
+ if (cardinality == null) {
+ if (ctx.getFromNamespace(ExtensionNamespace.class, key.getStatementName()) == null) {
+ throw new InvalidSubstatementException(ctx.getStatementSourceReference(),
+ "%s is not valid for %s. Error in module %s (%s)", key, currentStatement,
+ ctx.getRoot().getStatementArgument(),
+ ctx.getFromNamespace(ModuleCtxToModuleQName.class, ctx.getRoot()));