+
+ @Override
+ protected final PatternEffectiveStatement createEffective(
+ final StmtContext<PatternConstraint, PatternStatement, PatternEffectiveStatement> ctx,
+ final PatternStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ final String description = findFirstArgument(substatements, DescriptionEffectiveStatement.class, null);
+ final String reference = findFirstArgument(substatements, ReferenceEffectiveStatement.class, null);
+ final String errorAppTag = findFirstArgument(substatements, ErrorAppTagEffectiveStatement.class, null);
+ final String errorMessage = findFirstArgument(substatements, ErrorMessageEffectiveStatement.class, null);
+ final ModifierKind modifier = findFirstArgument(substatements, ModifierEffectiveStatement.class, null);
+
+ if (description == null && reference == null && errorAppTag == null && errorMessage == null
+ && modifier == null) {
+ // No customization, just use declared statement for the actual value
+ return new SimplePatternEffectiveStatement(declared, substatements);
+ }
+
+ return new RegularPatternEffectiveStatement(declared, new PatternConstraintImpl(declared.argument(),
+ description, reference, errorAppTag, errorMessage, modifier), substatements);
+ }
+
+ @Override
+ protected final PatternEffectiveStatement createEmptyEffective(
+ final StmtContext<PatternConstraint, PatternStatement, PatternEffectiveStatement> ctx,
+ final PatternStatement declared) {
+ return new EmptyPatternEffectiveStatement(declared);
+ }
+}