Fixup collections return implementations
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / pattern / AbstractPatternStatementSupport.java
index 814fbafecc39a45c4b44ac7ab1f8046cda7ad075..339bbdc5e9ca6054f78540622a540a2437732887 100644 (file)
@@ -7,50 +7,61 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.pattern;
 
-import java.util.Optional;
+import com.google.common.collect.ImmutableList;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PatternExpression;
 import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement;
-import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.util.RegexUtils;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-abstract class AbstractPatternStatementSupport extends AbstractStatementSupport<PatternConstraint, PatternStatement,
-        EffectiveStatement<PatternConstraint, PatternStatement>> {
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractPatternStatementSupport.class);
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
+abstract class AbstractPatternStatementSupport
+        extends BaseStatementSupport<PatternExpression, PatternStatement, PatternEffectiveStatement> {
     AbstractPatternStatementSupport() {
-        super(YangStmtMapping.PATTERN);
+        super(YangStmtMapping.PATTERN, CopyPolicy.CONTEXT_INDEPENDENT);
     }
 
     @Override
-    public final PatternConstraint parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+    public final PatternExpression parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
         final String pattern = RegexUtils.getJavaRegexFromXSD(value);
-
         try {
             Pattern.compile(pattern);
         } catch (final PatternSyntaxException e) {
-            LOG.debug("Pattern \"{}\" failed to compile at {}", pattern, ctx.getStatementSourceReference(), e);
-            return null;
+            throw new SourceException(ctx.getStatementSourceReference(), e,
+                "Pattern \"%s\" failed to compile", pattern);
         }
+        return PatternExpression.of(value, pattern);
+    }
 
-        return new PatternConstraintImpl(pattern, value, Optional.empty(), Optional.empty());
+    @Override
+    protected final PatternStatement createDeclared(final StmtContext<PatternExpression, PatternStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularPatternStatement(ctx.coerceStatementArgument(), substatements);
+    }
+
+    @Override
+    protected final PatternStatement createEmptyDeclared(
+            final StmtContext<PatternExpression, PatternStatement, ?> ctx) {
+        return new EmptyPatternStatement(ctx.coerceStatementArgument());
     }
 
     @Override
-    public final PatternStatement createDeclared(final StmtContext<PatternConstraint, PatternStatement, ?> ctx) {
-        return new PatternStatementImpl(ctx);
+    protected final PatternEffectiveStatement createEffective(
+            final StmtContext<PatternExpression, PatternStatement, PatternEffectiveStatement> ctx,
+            final PatternStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularPatternEffectiveStatement(declared, substatements);
     }
 
     @Override
-    public final EffectiveStatement<PatternConstraint, PatternStatement> createEffective(
-            final StmtContext<PatternConstraint, PatternStatement,
-            EffectiveStatement<PatternConstraint, PatternStatement>> ctx) {
-        return new PatternEffectiveStatementImpl(ctx);
+    protected final PatternEffectiveStatement createEmptyEffective(
+            final StmtContext<PatternExpression, PatternStatement, PatternEffectiveStatement> ctx,
+            final PatternStatement declared) {
+        return new EmptyPatternEffectiveStatement(declared);
     }
-}
\ No newline at end of file
+}