- private final boolean mandatory;
-
- ChoiceEffectiveStatementImpl(
- final StmtContext<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> ctx) {
- super(ctx);
- this.original = (ChoiceSchemaNode) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
-
- // initSubstatementCollectionsAndFields
- final Set<AugmentationSchemaNode> augmentationsInit = new LinkedHashSet<>();
- final SortedMap<QName, CaseSchemaNode> casesInit = new TreeMap<>();
-
- for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
- if (effectiveStatement instanceof AugmentationSchemaNode) {
- final AugmentationSchemaNode augmentationSchema = (AugmentationSchemaNode) effectiveStatement;
- augmentationsInit.add(augmentationSchema);
- }
- if (effectiveStatement instanceof CaseSchemaNode) {
- final CaseSchemaNode choiceCaseNode = (CaseSchemaNode) effectiveStatement;
- // FIXME: we may be overwriting a previous entry, is that really okay?
- casesInit.put(choiceCaseNode.getQName(), choiceCaseNode);
- }
- }
-
- this.augmentations = ImmutableSet.copyOf(augmentationsInit);
- this.cases = ImmutableSortedMap.copyOfSorted(casesInit);
-
- final Optional<String> defaultArg = findFirstEffectiveSubstatementArgument(DefaultEffectiveStatement.class);
- if (defaultArg.isPresent()) {
- final String arg = defaultArg.get();
- final QName qname;
- try {
- qname = QName.create(getQName(), arg);
- } catch (IllegalArgumentException e) {
- throw new SourceException(ctx.getStatementSourceReference(), "Default statement has invalid name '%s'",
- arg, e);
- }
-
- // FIXME: this does not work with submodules, as they are
- defaultCase = InferenceException.throwIfNull(cases.get(qname), ctx.getStatementSourceReference(),
- "Default statement refers to missing case %s", qname);
- } else {
- defaultCase = null;
- }
+ private final @NonNull SchemaPath path;
+ private final int flags;
+
+ ChoiceEffectiveStatementImpl(final ChoiceStatement declared,
+ final StmtContext<QName, ChoiceStatement, ChoiceEffectiveStatement> ctx,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final int flags,
+ final @Nullable CaseSchemaNode defaultCase, final @Nullable ChoiceSchemaNode original) {
+ super(declared, ctx, substatements);
+ this.flags = flags;
+ this.path = ctx.getSchemaPath().get();
+ this.defaultCase = defaultCase;
+ this.original = original;
+ }