Update yang-parser-api
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / meta / OrderedByStatementSupport.java
index 44e84f8525d110dce41a4e1f86a55b2852e3e89b..d445c9e4f9cacfc2de436a0cfac26ddb8d9517be 100644 (file)
@@ -11,12 +11,15 @@ import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.Ordering;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 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.OrderedByEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
+import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -27,7 +30,6 @@ public final class OrderedByStatementSupport
         extends AbstractStatementSupport<Ordering, OrderedByStatement, OrderedByEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
             SubstatementValidator.builder(YangStmtMapping.ORDERED_BY).build();
-    private static final OrderedByStatementSupport INSTANCE = new OrderedByStatementSupport();
 
     /*
      * Ordered-by has low argument cardinality, hence we can reuse them in case declaration does not have any
@@ -43,12 +45,8 @@ public final class OrderedByStatementSupport
     private static final @NonNull OrderedByEffectiveStatement EMPTY_USER_EFF =
         EffectiveStatements.createOrderedBy(EMPTY_USER_DECL);
 
-    private OrderedByStatementSupport() {
-        super(YangStmtMapping.ORDERED_BY, StatementPolicy.contextIndependent());
-    }
-
-    public static OrderedByStatementSupport getInstance() {
-        return INSTANCE;
+    public OrderedByStatementSupport(final YangParserConfiguration config) {
+        super(YangStmtMapping.ORDERED_BY, StatementPolicy.contextIndependent(), config);
     }
 
     @Override
@@ -79,20 +77,25 @@ public final class OrderedByStatementSupport
     @Override
     protected OrderedByStatement createDeclared(final StmtContext<Ordering, OrderedByStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return DeclaredStatements.createOrderedBy(ctx.getArgument(), substatements);
+        if (substatements.isEmpty()) {
+            final Ordering argument = ctx.getArgument();
+            switch (argument) {
+                case SYSTEM:
+                    return EMPTY_SYSTEM_DECL;
+                case USER:
+                    return EMPTY_USER_DECL;
+                default:
+                    throw new IllegalStateException("Unhandled argument " + argument);
+            }
+        } else {
+            return DeclaredStatements.createOrderedBy(ctx.getArgument(), substatements);
+        }
     }
 
     @Override
-    protected OrderedByStatement createEmptyDeclared(final StmtContext<Ordering, OrderedByStatement, ?> ctx) {
-        final Ordering argument = ctx.getArgument();
-        switch (argument) {
-            case SYSTEM:
-                return EMPTY_SYSTEM_DECL;
-            case USER:
-                return EMPTY_USER_DECL;
-            default:
-                throw new IllegalStateException("Unhandled argument " + argument);
-        }
+    protected OrderedByStatement attachDeclarationReference(final OrderedByStatement stmt,
+            final DeclarationReference reference) {
+        return DeclaredStatementDecorators.decorateOrderedBy(stmt, reference);
     }
 
     @Override