public OutputEffectiveStatementImpl(
      StmtContext<QName, OutputStatement, EffectiveStatement<QName, OutputStatement>> ctx) {
    super(ctx);

    qname = ctx.getStatementArgument();
    path = Utils.getSchemaPath(ctx);
    presence = (firstEffective(PresenceEffectiveStatementImpl.class) == null) ? false : true;
    this.constraints = new EffectiveConstraintDefinitionImpl(this);

    initSubstatementCollections();
    initCopyType(ctx);
  }
  AbstractEffectiveSchemaNode(StmtContext<QName, D, ?> ctx) {
    super(ctx);
    this.qname = ctx.getStatementArgument();
    this.path = Utils.getSchemaPath(ctx);

    Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements =
        effectiveSubstatements();
    ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
    for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
      if (effectiveStatement instanceof UnknownSchemaNode) {
        listBuilder.add((UnknownSchemaNode) effectiveStatement);
      }
    }
    this.unknownNodes = listBuilder.build();
  }
  protected UnsignedIntegerEffectiveImplBase(
      final StmtContext<String, TypeStatement, EffectiveStatement<String, TypeStatement>> ctx,
      final String localName,
      final Number maxRange,
      final String description) {

    super(ctx);

    this.qName = QName.create(YangConstants.RFC6020_YANG_MODULE, localName);
    path = Utils.getSchemaPath(ctx);

    final String rangeDescription =
        "Integer values between " + MIN_RANGE + " and " + maxRange + ", inclusively.";
    final RangeConstraint defaultRange =
        new RangeConstraintEffectiveImpl(
            MIN_RANGE,
            maxRange,
            Optional.of(rangeDescription),
            Optional.of(RangeConstraintEffectiveImpl.DEFAULT_REFERENCE));
    rangeStatements = Collections.singletonList(defaultRange);

    this.description = description;
  }