- // init submodules and substatements of submodules
- final List<EffectiveStatement<?, ?>> substatementsOfSubmodules;
- final Map<String, StmtContext<?, ?, ?>> includedSubmodulesMap = ctx
- .getAllFromCurrentStmtCtxNamespace(IncludedSubmoduleNameToModuleCtx.class);
-
- if (includedSubmodulesMap == null || includedSubmodulesMap.isEmpty()) {
- this.submodules = ImmutableSet.of();
- this.submoduleContextsToBuild = ImmutableSet.of();
- substatementsOfSubmodules = ImmutableList.of();
- } else if (YangStmtMapping.MODULE.equals(ctx.getPublicDefinition())) {
- /*
- * Aggregation of substatements from submodules should be done only
- * for modules. In case of submodules it does not make sense because
- * of possible circular chains of includes between submodules.
- */
- final Set<Module> submodulesInit = new HashSet<>();
- final List<EffectiveStatement<?, ?>> substatementsOfSubmodulesInit = new ArrayList<>();
- for (final StmtContext<?, ?, ?> submoduleCtx : includedSubmodulesMap.values()) {
- final EffectiveStatement<?, ?> submodule = submoduleCtx.buildEffective();
- Verify.verify(submodule instanceof SubmoduleEffectiveStatement);
- Verify.verify(submodule instanceof Module, "Submodule statement %s is not a Module", submodule);
- submodulesInit.add((Module) submodule);
- substatementsOfSubmodulesInit.addAll(submodule.effectiveSubstatements().stream()
- .filter(sub -> sub instanceof SchemaNode || sub instanceof DataNodeContainer)
- .collect(Collectors.toList()));
- }
-
- this.submodules = ImmutableSet.copyOf(submodulesInit);
- this.submoduleContextsToBuild = ImmutableSet.of();
- substatementsOfSubmodules = ImmutableList.copyOf(substatementsOfSubmodulesInit);
- } else {
- /*
- * Because of possible circular chains of includes between submodules we can
- * collect only submodule contexts here and then build them during
- * sealing of this statement.
- */
- final Set<StmtContext<?, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>>
- submoduleContextsInit = new HashSet<>();
- for (final StmtContext<?, ?, ?> submoduleCtx : includedSubmodulesMap.values()) {
- submoduleContextsInit.add(
- (StmtContext<?, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>)submoduleCtx);
- }
-
- this.submoduleContextsToBuild = ImmutableSet.copyOf(submoduleContextsInit);
- substatementsOfSubmodules = ImmutableList.of();
- }
-
- if (!submoduleContextsToBuild.isEmpty()) {
- ((Mutable<?, ?, ?>) ctx).addMutableStmtToSeal(this);
- sealed = false;
- } else {
- sealed = true;
- }
-
- // init substatements collections
- final List<EffectiveStatement<?, ?>> effectiveSubstatements = new ArrayList<>();
- effectiveSubstatements.addAll(effectiveSubstatements());
- effectiveSubstatements.addAll(substatementsOfSubmodules);
-
- final List<UnknownSchemaNode> unknownNodesInit = new ArrayList<>();