DecimalTypeEffectiveStatementImpl(
final StmtContext<String, TypeStatement, EffectiveStatement<String, TypeStatement>> ctx,
final DecimalTypeDefinition baseType) {
super(ctx);
final RangeRestrictedTypeBuilder<DecimalTypeDefinition, BigDecimal> builder =
RestrictedTypes.newDecima64Builder(baseType, AbstractTypeStatementSupport.typeEffectiveSchemaPath(ctx));
for (EffectiveStatement<?, ?> stmt : effectiveSubstatements()) {
if (stmt instanceof RangeEffectiveStatementImpl) {
final RangeEffectiveStatementImpl range = (RangeEffectiveStatementImpl) stmt;
builder.setRangeConstraint(range, range.argument());
}
if (stmt instanceof FractionDigitsEffectiveStatement) {
final Integer digits = ((FractionDigitsEffectiveStatement)stmt).argument();
SourceException.throwIf(baseType.getFractionDigits() != digits, ctx.getStatementSourceReference(),
"Cannot override fraction-digits from base type %s to %s", baseType, digits);
}
if (stmt instanceof UnknownSchemaNode) {
builder.addUnknownSchemaNode((UnknownSchemaNode)stmt);
}
}
typeDefinition = builder.build();
}