All StatementSupports must support DeclarationReference 85/95885/5
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 22 Apr 2021 11:51:42 +0000 (13:51 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 23 Apr 2021 06:23:28 +0000 (08:23 +0200)
Make sure we force all StatementSupport classes to implement
attachDeclarationReference(), without a default no-op implementation.
Also fix all implementation to comply with this requirement.

JIRA: YANGTOOLS-1193
Change-Id: I06d1de989dc967d27477dbf49111f792706a4799
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
52 files changed:
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java [new file with mode: 0644]
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextInstanceStatement.java [new file with mode: 0644]
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextReferenceStatement.java [new file with mode: 0644]
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefInstanceTargetStatement.java [new file with mode: 0644]
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefRpcContextReferenceStatement.java [new file with mode: 0644]
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueEffectiveStatementImpl.java [new file with mode: 0644]
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueStatementImpl.java [new file with mode: 0644]
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/RefOpenConfigHashedValueStatement.java [new file with mode: 0644]
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementImpl.java [new file with mode: 0644]
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/RefGetFilterElementAttributesStatement.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementImpl.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementImpl.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyAllStatement.java [new file with mode: 0644]
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyWriteStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementImpl.java [moved from yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidIdStatementImpl.java with 84% similarity]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefAliasStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDefValStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDisplayHintStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefImpliedStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefMaxAccessStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefOidStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefSubIdStatement.java [new file with mode: 0644]
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationEffectiveStatementImpl.java [new file with mode: 0644]
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementImpl.java [new file with mode: 0644]
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/RefAnnotationStatement.java [new file with mode: 0644]
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/RefYangDataStatement.java [new file with mode: 0644]
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementImpl.java [new file with mode: 0644]
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/RefMountPointStatement.java [new file with mode: 0644]
yang/yang-model-spi/src/main/java/org/opendaylight/yangtools/yang/model/spi/meta/AbstractRefStatement.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java

index 3b6ff348447776201f1ee62ae8b63b4cca7d126e..dc1077901f5344a38d90ff846e24f3cf2a057980 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveSta
 import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
 import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
+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.parser.api.YangParserConfiguration;
@@ -54,6 +55,12 @@ public final class AugmentIdentifierStatementSupport
         return new AugmentIdentifierStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected AugmentIdentifierStatement attachDeclarationReference(final AugmentIdentifierStatement stmt,
+            final DeclarationReference reference) {
+        return new RefAugmentIdentifierStatement(stmt, reference);
+    }
+
     @Override
     protected AugmentIdentifierEffectiveStatement createEffective(
             final Current<UnqualifiedQName, AugmentIdentifierStatement> stmt,
index a10211e35d56e205f4fd98382793a5cc7a330362..d135f8ed6204c7657d1d9ea753dd00cd68a9b3f7 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.odlext.model.api.ContextInstanceEffectiveState
 import org.opendaylight.yangtools.odlext.model.api.ContextInstanceStatement;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
 import org.opendaylight.yangtools.yang.common.QName;
+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.IdentityEffectiveStatement;
@@ -32,6 +33,12 @@ public final class ContextInstanceStatementSupport
         return new ContextInstanceStatementImpl(ctx.getRawArgument(), ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected ContextInstanceStatement attachDeclarationReference(final ContextInstanceStatement stmt,
+            final DeclarationReference reference) {
+        return new RefContextInstanceStatement(stmt, reference);
+    }
+
     @Override
     ContextInstanceEffectiveStatement createEffective(final ContextInstanceStatement declared,
             final IdentityEffectiveStatement identity,
index a898cd54707c17048703f9026620d5312b4155e5..4792cdca2227454812483281827d2cf8a8349a02 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.odlext.model.api.ContextReferenceEffectiveStat
 import org.opendaylight.yangtools.odlext.model.api.ContextReferenceStatement;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
 import org.opendaylight.yangtools.yang.common.QName;
+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.IdentityEffectiveStatement;
@@ -32,6 +33,12 @@ public final class ContextReferenceStatementSupport
         return new ContextReferenceStatementImpl(ctx.rawArgument(), ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected ContextReferenceStatement attachDeclarationReference(final ContextReferenceStatement stmt,
+            final DeclarationReference reference) {
+        return new RefContextReferenceStatement(stmt, reference);
+    }
+
     @Override
     ContextReferenceEffectiveStatement createEffective(final ContextReferenceStatement declared,
             final IdentityEffectiveStatement identity,
index e93f899922caf54076c9e11705ef14818a3353cf..f94cb00d2ccff4c7777f24acaccc346f346e649d 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.odlext.model.api.InstanceTargetEffectiveStatement;
 import org.opendaylight.yangtools.odlext.model.api.InstanceTargetStatement;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
+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.parser.api.YangParserConfiguration;
@@ -41,6 +42,12 @@ public final class InstanceTargetStatementSupport
         return new InstanceTargetStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected InstanceTargetStatement attachDeclarationReference(final InstanceTargetStatement stmt,
+            final DeclarationReference reference) {
+        return new RefInstanceTargetStatement(stmt, reference);
+    }
+
     @Override
     protected InstanceTargetEffectiveStatement createEffective(final Current<String, InstanceTargetStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefAugmentIdentifierStatement.java
new file mode 100644 (file)
index 0000000..befe367
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.odlext.parser;
+
+import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement;
+import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefAugmentIdentifierStatement extends AbstractRefStatement<UnqualifiedQName, AugmentIdentifierStatement>
+        implements AugmentIdentifierStatement {
+    RefAugmentIdentifierStatement(final AugmentIdentifierStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextInstanceStatement.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextInstanceStatement.java
new file mode 100644 (file)
index 0000000..693f399
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.odlext.parser;
+
+import org.opendaylight.yangtools.odlext.model.api.ContextInstanceStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefContextInstanceStatement extends AbstractRefStatement<QName, ContextInstanceStatement>
+        implements ContextInstanceStatement {
+    RefContextInstanceStatement(final ContextInstanceStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextReferenceStatement.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefContextReferenceStatement.java
new file mode 100644 (file)
index 0000000..e0f1f84
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.odlext.parser;
+
+import org.opendaylight.yangtools.odlext.model.api.ContextReferenceStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefContextReferenceStatement extends AbstractRefStatement<QName, ContextReferenceStatement>
+        implements ContextReferenceStatement {
+    RefContextReferenceStatement(final ContextReferenceStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefInstanceTargetStatement.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefInstanceTargetStatement.java
new file mode 100644 (file)
index 0000000..bc6375e
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.odlext.parser;
+
+import org.opendaylight.yangtools.odlext.model.api.InstanceTargetStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefInstanceTargetStatement extends AbstractRefStatement<String, InstanceTargetStatement>
+        implements InstanceTargetStatement {
+    RefInstanceTargetStatement(final InstanceTargetStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefRpcContextReferenceStatement.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RefRpcContextReferenceStatement.java
new file mode 100644 (file)
index 0000000..9fc66e9
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.odlext.parser;
+
+import org.opendaylight.yangtools.odlext.model.api.RpcContextReferenceStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefRpcContextReferenceStatement extends AbstractRefStatement<String, RpcContextReferenceStatement>
+        implements RpcContextReferenceStatement {
+    RefRpcContextReferenceStatement(final RpcContextReferenceStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
index d61e24e64cf6875e503246ee4f0d2cfc993343ca..df421544ef8546fa270aed1f1cc74a11b2b61b40 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements;
 import org.opendaylight.yangtools.odlext.model.api.RpcContextReferenceEffectiveStatement;
 import org.opendaylight.yangtools.odlext.model.api.RpcContextReferenceStatement;
+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.parser.api.YangParserConfiguration;
@@ -42,6 +43,12 @@ public final class RpcContextReferenceStatementSupport
         return new RpcContextReferenceStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected RpcContextReferenceStatement attachDeclarationReference(final RpcContextReferenceStatement stmt,
+            final DeclarationReference reference) {
+        return new RefRpcContextReferenceStatement(stmt, reference);
+    }
+
     @Override
     protected RpcContextReferenceEffectiveStatement createEffective(
             final Current<String, RpcContextReferenceStatement> stmt,
index 8e792ebd98b99ac4b6007984761d2344b4d24cd5..768e1eea4f165558da53def56d81c8eda89ec1e1 100644 (file)
@@ -7,83 +7,22 @@
  */
 package org.opendaylight.yangtools.openconfig.parser;
 
-import static java.util.Objects.requireNonNull;
-
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement;
 import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
 import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+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.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 abstract class AbstractHashedValueStatementSupport
         extends AbstractEmptyStatementSupport<OpenConfigHashedValueStatement, OpenConfigHashedValueEffectiveStatement> {
-
-    private static final class Declared extends WithSubstatements implements OpenConfigHashedValueStatement {
-        private final @NonNull StatementDefinition definition;
-
-        Declared(final StatementDefinition definition,
-                final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(substatements);
-            this.definition = requireNonNull(definition);
-        }
-
-        @Override
-        public StatementDefinition statementDefinition() {
-            return definition;
-        }
-    }
-
-    private static final class Effective
-            extends UnknownEffectiveStatementBase<Empty, OpenConfigHashedValueStatement>
-            implements OpenConfigHashedValueEffectiveStatement {
-        private final @NonNull StatementDefinition definition;
-        private final @NonNull Immutable path;
-
-        Effective(final Current<Empty, OpenConfigHashedValueStatement> stmt,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-            super(stmt, substatements);
-            definition = stmt.publicDefinition();
-            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
-                    .createChild(stmt.publicDefinition().getStatementName()));
-        }
-
-        @Override
-        public QName getQName() {
-            return SchemaNodeDefaults.extractQName(path);
-        }
-
-        @Override
-        @Deprecated
-        public SchemaPath getPath() {
-            return SchemaNodeDefaults.extractPath(this, path);
-        }
-
-        @Override
-        public StatementDefinition statementDefinition() {
-            return definition;
-        }
-
-        @Override
-        public OpenConfigHashedValueEffectiveStatement asEffectiveStatement() {
-            return this;
-        }
-    }
-
     private final SubstatementValidator validator;
 
     AbstractHashedValueStatementSupport(final StatementDefinition definition, final YangParserConfiguration config) {
@@ -100,13 +39,19 @@ abstract class AbstractHashedValueStatementSupport
     protected final OpenConfigHashedValueStatement createDeclared(
             final StmtContext<Empty, OpenConfigHashedValueStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new Declared(getPublicView(), substatements);
+        return new OpenConfigHashedValueStatementImpl(getPublicView(), substatements);
+    }
+
+    @Override
+    protected final OpenConfigHashedValueStatement attachDeclarationReference(
+            final OpenConfigHashedValueStatement stmt, final DeclarationReference reference) {
+        return new RefOpenConfigHashedValueStatement(stmt, reference);
     }
 
     @Override
     protected OpenConfigHashedValueEffectiveStatement createEffective(
             final Current<Empty, OpenConfigHashedValueStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new Effective(stmt, substatements);
+        return new OpenConfigHashedValueEffectiveStatementImpl(stmt, substatements);
     }
 }
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueEffectiveStatementImpl.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..75d7c94
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
+
+final class OpenConfigHashedValueEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<Empty, OpenConfigHashedValueStatement>
+        implements OpenConfigHashedValueEffectiveStatement {
+    private final @NonNull StatementDefinition definition;
+    private final @NonNull Immutable path;
+
+    OpenConfigHashedValueEffectiveStatementImpl(final Current<Empty, OpenConfigHashedValueStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
+        definition = stmt.publicDefinition();
+        path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
+                .createChild(stmt.publicDefinition().getStatementName()));
+    }
+
+    @Override
+    public QName getQName() {
+        return SchemaNodeDefaults.extractQName(path);
+    }
+
+    @Override
+    @Deprecated
+    public SchemaPath getPath() {
+        return SchemaNodeDefaults.extractPath(this, path);
+    }
+
+    @Override
+    public StatementDefinition statementDefinition() {
+        return definition;
+    }
+
+    @Override
+    public OpenConfigHashedValueEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueStatementImpl.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/OpenConfigHashedValueStatementImpl.java
new file mode 100644 (file)
index 0000000..c1bbcb8
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.parser;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
+
+final class OpenConfigHashedValueStatementImpl extends WithSubstatements implements OpenConfigHashedValueStatement {
+    private final @NonNull StatementDefinition definition;
+
+    OpenConfigHashedValueStatementImpl(final StatementDefinition definition,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(substatements);
+        this.definition = requireNonNull(definition);
+    }
+
+    @Override
+    public StatementDefinition statementDefinition() {
+        return definition;
+    }
+}
\ No newline at end of file
diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/RefOpenConfigHashedValueStatement.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/RefOpenConfigHashedValueStatement.java
new file mode 100644 (file)
index 0000000..3be4d44
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.openconfig.parser;
+
+import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefOpenConfigHashedValueStatement extends AbstractRefStatement<Empty, OpenConfigHashedValueStatement>
+        implements OpenConfigHashedValueStatement {
+    RefOpenConfigHashedValueStatement(final OpenConfigHashedValueStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesEffectiveStatementImpl.java b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..7011407
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6241.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement;
+import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesSchemaNode;
+import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
+
+final class GetFilterElementAttributesEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<Empty, GetFilterElementAttributesStatement>
+        implements GetFilterElementAttributesEffectiveStatement, GetFilterElementAttributesSchemaNode {
+    private final @NonNull Immutable path;
+
+    GetFilterElementAttributesEffectiveStatementImpl(final Current<Empty, GetFilterElementAttributesStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
+        path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
+                .createChild(stmt.publicDefinition().getStatementName()));
+    }
+
+    @Override
+    public QName getQName() {
+        return SchemaNodeDefaults.extractQName(path);
+    }
+
+    @Override
+    @Deprecated
+    public SchemaPath getPath() {
+        return SchemaNodeDefaults.extractPath(this, path);
+    }
+
+    @Override
+    public GetFilterElementAttributesEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementImpl.java b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementImpl.java
new file mode 100644 (file)
index 0000000..0ba8e44
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6241.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
+
+final class GetFilterElementAttributesStatementImpl extends WithSubstatements
+        implements GetFilterElementAttributesStatement {
+    static final @NonNull GetFilterElementAttributesStatementImpl EMPTY =
+        new GetFilterElementAttributesStatementImpl(ImmutableList.of());
+
+    GetFilterElementAttributesStatementImpl(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(substatements);
+    }
+}
\ No newline at end of file
index 224f45423a09e5dfe2fe69e5fbb8dbad05f7ea3e..53d8a62e0127b82ee66c39533108e86e81dd0815 100644 (file)
@@ -9,25 +9,17 @@ package org.opendaylight.yangtools.rfc6241.parser;
 
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesEffectiveStatement;
-import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesSchemaNode;
 import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
 import org.opendaylight.yangtools.rfc6241.model.api.NetconfStatements;
 import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 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.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
@@ -37,44 +29,6 @@ import org.slf4j.LoggerFactory;
 @Beta
 public final class GetFilterElementAttributesStatementSupport extends AbstractEmptyStatementSupport<
         GetFilterElementAttributesStatement, GetFilterElementAttributesEffectiveStatement> {
-
-    private static final class Declared extends WithSubstatements implements GetFilterElementAttributesStatement {
-        static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
-
-        Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(substatements);
-        }
-    }
-
-    private static final class Effective
-            extends UnknownEffectiveStatementBase<Empty, GetFilterElementAttributesStatement>
-            implements GetFilterElementAttributesEffectiveStatement, GetFilterElementAttributesSchemaNode {
-        private final @NonNull Immutable path;
-
-        Effective(final Current<Empty, GetFilterElementAttributesStatement> stmt,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-            super(stmt, substatements);
-            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
-                    .createChild(stmt.publicDefinition().getStatementName()));
-        }
-
-        @Override
-        public QName getQName() {
-            return SchemaNodeDefaults.extractQName(path);
-        }
-
-        @Override
-        @Deprecated
-        public SchemaPath getPath() {
-            return SchemaNodeDefaults.extractPath(this, path);
-        }
-
-        @Override
-        public GetFilterElementAttributesEffectiveStatement asEffectiveStatement() {
-            return this;
-        }
-    }
-
     private static final Logger LOG = LoggerFactory.getLogger(GetFilterElementAttributesStatementSupport.class);
     private static final SubstatementValidator VALIDATOR =
         SubstatementValidator.builder(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES).build();
@@ -99,14 +53,21 @@ public final class GetFilterElementAttributesStatementSupport extends AbstractEm
     protected GetFilterElementAttributesStatement createDeclared(
             final StmtContext<Empty, GetFilterElementAttributesStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return substatements.isEmpty() ? Declared.EMPTY : new Declared(substatements);
+        return substatements.isEmpty() ? GetFilterElementAttributesStatementImpl.EMPTY
+            : new GetFilterElementAttributesStatementImpl(substatements);
+    }
+
+    @Override
+    protected GetFilterElementAttributesStatement attachDeclarationReference(
+            final GetFilterElementAttributesStatement stmt, final DeclarationReference reference) {
+        return new RefGetFilterElementAttributesStatement(stmt, reference);
     }
 
     @Override
     protected GetFilterElementAttributesEffectiveStatement createEffective(
             final Current<Empty, GetFilterElementAttributesStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new Effective(stmt, substatements);
+        return new GetFilterElementAttributesEffectiveStatementImpl(stmt, substatements);
     }
 
     private static boolean computeSupported(final StmtContext<?, ?, ?> stmt) {
diff --git a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/RefGetFilterElementAttributesStatement.java b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/RefGetFilterElementAttributesStatement.java
new file mode 100644 (file)
index 0000000..13bbf6c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6241.parser;
+
+import org.opendaylight.yangtools.rfc6241.model.api.GetFilterElementAttributesStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefGetFilterElementAttributesStatement
+        extends AbstractRefStatement<Empty, GetFilterElementAttributesStatement>
+        implements GetFilterElementAttributesStatement {
+    RefGetFilterElementAttributesStatement(final GetFilterElementAttributesStatement delegate,
+            final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllEffectiveStatementImpl.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..62f94f9
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllEffectiveStatement;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllSchemaNode;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
+
+final class DefaultDenyAllEffectiveStatementImpl extends UnknownEffectiveStatementBase<Empty, DefaultDenyAllStatement>
+        implements DefaultDenyAllEffectiveStatement, DefaultDenyAllSchemaNode {
+    private final @NonNull Immutable path;
+
+    DefaultDenyAllEffectiveStatementImpl(final Current<Empty, DefaultDenyAllStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
+        path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
+                .createChild(stmt.publicDefinition().getStatementName()));
+    }
+
+    @Override
+    public QName getQName() {
+        return SchemaNodeDefaults.extractQName(path);
+    }
+
+    @Override
+    @Deprecated
+    public SchemaPath getPath() {
+        return SchemaNodeDefaults.extractPath(this, path);
+    }
+
+    @Override
+    public DefaultDenyAllEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementImpl.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementImpl.java
new file mode 100644 (file)
index 0000000..42581c1
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
+
+final class DefaultDenyAllStatementImpl extends WithSubstatements implements DefaultDenyAllStatement {
+    static final @NonNull DefaultDenyAllStatementImpl EMPTY = new DefaultDenyAllStatementImpl(ImmutableList.of());
+
+    DefaultDenyAllStatementImpl(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(substatements);
+    }
+}
\ No newline at end of file
index 996c40b6125f04b662b9dda063b3f02a7b27d2ba..1f983b9d84a3d9e48d8b59c1ac8a96911d66538b 100644 (file)
@@ -8,65 +8,21 @@
 package org.opendaylight.yangtools.rfc6536.parser;
 
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllEffectiveStatement;
-import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllSchemaNode;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
 import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+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.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class DefaultDenyAllStatementSupport
         extends AbstractEmptyStatementSupport<DefaultDenyAllStatement, DefaultDenyAllEffectiveStatement> {
-    private static final class Declared extends WithSubstatements implements DefaultDenyAllStatement {
-        static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
-
-        Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(substatements);
-        }
-    }
-
-    private static final class Effective extends UnknownEffectiveStatementBase<Empty, DefaultDenyAllStatement>
-            implements DefaultDenyAllEffectiveStatement, DefaultDenyAllSchemaNode {
-        private final @NonNull Immutable path;
-
-        Effective(final Current<Empty, DefaultDenyAllStatement> stmt,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-            super(stmt, substatements);
-            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
-                    .createChild(stmt.publicDefinition().getStatementName()));
-        }
-
-        @Override
-        public QName getQName() {
-            return SchemaNodeDefaults.extractQName(path);
-        }
-
-        @Override
-        @Deprecated
-        public SchemaPath getPath() {
-            return SchemaNodeDefaults.extractPath(this, path);
-        }
-
-        @Override
-        public DefaultDenyAllEffectiveStatement asEffectiveStatement() {
-            return this;
-        }
-    }
-
     private static final SubstatementValidator VALIDATOR =
         SubstatementValidator.builder(NACMStatements.DEFAULT_DENY_ALL).build();
 
@@ -82,12 +38,19 @@ public final class DefaultDenyAllStatementSupport
     @Override
     protected DefaultDenyAllStatement createDeclared(final StmtContext<Empty, DefaultDenyAllStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return substatements.isEmpty() ? Declared.EMPTY : new Declared(substatements);
+        return substatements.isEmpty() ? DefaultDenyAllStatementImpl.EMPTY
+            : new DefaultDenyAllStatementImpl(substatements);
+    }
+
+    @Override
+    protected DefaultDenyAllStatement attachDeclarationReference(final DefaultDenyAllStatement stmt,
+            final DeclarationReference reference) {
+        return new RefDefaultDenyAllStatement(stmt, reference);
     }
 
     @Override
     protected DefaultDenyAllEffectiveStatement createEffective(final Current<Empty, DefaultDenyAllStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new Effective(stmt, substatements);
+        return new DefaultDenyAllEffectiveStatementImpl(stmt, substatements);
     }
 }
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteEffectiveStatementImpl.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..8591b31
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
+
+final class DefaultDenyWriteEffectiveStatementImpl
+        extends UnknownEffectiveStatementBase<Empty, DefaultDenyWriteStatement>
+        implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode {
+    private final @NonNull Immutable path;
+
+    DefaultDenyWriteEffectiveStatementImpl(final Current<Empty, DefaultDenyWriteStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
+        path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
+                .createChild(stmt.publicDefinition().getStatementName()));
+    }
+
+    @Override
+    public QName getQName() {
+        return SchemaNodeDefaults.extractQName(path);
+    }
+
+    @Override
+    @Deprecated
+    public SchemaPath getPath() {
+        return SchemaNodeDefaults.extractPath(this, path);
+    }
+
+    @Override
+    public DefaultDenyWriteEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementImpl.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementImpl.java
new file mode 100644 (file)
index 0000000..7fe8d01
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
+
+final class DefaultDenyWriteStatementImpl extends WithSubstatements implements DefaultDenyWriteStatement {
+    static final @NonNull DefaultDenyWriteStatementImpl EMPTY = new DefaultDenyWriteStatementImpl(ImmutableList.of());
+
+    DefaultDenyWriteStatementImpl(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(substatements);
+    }
+}
\ No newline at end of file
index 83e7270f4d1a92b966e61766b95c4a15a78bb538..143ded2ff32324c396c8e4a4a942058c7a6e2c6b 100644 (file)
@@ -8,65 +8,21 @@
 package org.opendaylight.yangtools.rfc6536.parser;
 
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.Immutable;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteEffectiveStatement;
-import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteSchemaNode;
 import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
 import org.opendaylight.yangtools.rfc6536.model.api.NACMStatements;
 import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+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.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class DefaultDenyWriteStatementSupport
         extends AbstractEmptyStatementSupport<DefaultDenyWriteStatement, DefaultDenyWriteEffectiveStatement> {
-    private static final class Declared extends WithSubstatements implements DefaultDenyWriteStatement {
-        static final @NonNull Declared EMPTY = new Declared(ImmutableList.of());
-
-        Declared(final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(substatements);
-        }
-    }
-
-    private static final class Effective extends UnknownEffectiveStatementBase<Empty, DefaultDenyWriteStatement>
-            implements DefaultDenyWriteEffectiveStatement, DefaultDenyWriteSchemaNode {
-        private final @NonNull Immutable path;
-
-        Effective(final Current<Empty, DefaultDenyWriteStatement> stmt,
-                final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-            super(stmt, substatements);
-            path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath()
-                    .createChild(stmt.publicDefinition().getStatementName()));
-        }
-
-        @Override
-        public QName getQName() {
-            return SchemaNodeDefaults.extractQName(path);
-        }
-
-        @Override
-        @Deprecated
-        public SchemaPath getPath() {
-            return SchemaNodeDefaults.extractPath(this, path);
-        }
-
-        @Override
-        public DefaultDenyWriteEffectiveStatement asEffectiveStatement() {
-            return this;
-        }
-    }
-
     private static final SubstatementValidator VALIDATOR =
         SubstatementValidator.builder(NACMStatements.DEFAULT_DENY_WRITE).build();
 
@@ -82,12 +38,19 @@ public final class DefaultDenyWriteStatementSupport
     @Override
     protected DefaultDenyWriteStatement createDeclared(final StmtContext<Empty, DefaultDenyWriteStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return substatements.isEmpty() ? Declared.EMPTY : new Declared(substatements);
+        return substatements.isEmpty() ? DefaultDenyWriteStatementImpl.EMPTY
+            : new DefaultDenyWriteStatementImpl(substatements);
+    }
+
+    @Override
+    protected DefaultDenyWriteStatement attachDeclarationReference(final DefaultDenyWriteStatement stmt,
+            final DeclarationReference reference) {
+        return new RefDefaultDenyWriteStatement(stmt, reference);
     }
 
     @Override
     protected DefaultDenyWriteEffectiveStatement createEffective(final Current<Empty, DefaultDenyWriteStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new Effective(stmt, substatements);
+        return new DefaultDenyWriteEffectiveStatementImpl(stmt, substatements);
     }
 }
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyAllStatement.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyAllStatement.java
new file mode 100644 (file)
index 0000000..ba97a43
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyAllStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefDefaultDenyAllStatement extends AbstractRefStatement<Empty, DefaultDenyAllStatement>
+        implements DefaultDenyAllStatement {
+    RefDefaultDenyAllStatement(final DefaultDenyAllStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyWriteStatement.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/RefDefaultDenyWriteStatement.java
new file mode 100644 (file)
index 0000000..0adad5e
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6536.parser;
+
+import org.opendaylight.yangtools.rfc6536.model.api.DefaultDenyWriteStatement;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefDefaultDenyWriteStatement extends AbstractRefStatement<Empty, DefaultDenyWriteStatement>
+        implements DefaultDenyWriteStatement {
+    RefDefaultDenyWriteStatement(final DefaultDenyWriteStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
index 05d8d7fb19ad4b23a508c62553be4719592c445f..b8bb4f8dfb9fc06cded46f435c27108cd01469f0 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.AliasEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.AliasStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
 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.parser.api.YangParserConfiguration;
@@ -47,6 +48,12 @@ public final class AliasStatementSupport
         return new AliasStatementImpl(ctx.getRawArgument(), substatements);
     }
 
+    @Override
+    protected AliasStatement attachDeclarationReference(final AliasStatement stmt,
+            final DeclarationReference reference) {
+        return new RefAliasStatement(stmt, reference);
+    }
+
     @Override
     protected AliasEffectiveStatement createEffective(final Current<String, AliasStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 161fae0b28bea2ef01851a8fc5290128eaf4c3bd..7ad6adacea2dc1f3f187f7b212555bf48de0aa06 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.rfc6643.model.api.DefValEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+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.parser.api.YangParserConfiguration;
@@ -41,6 +42,12 @@ public final class DefValStatementSupport
         return new DefValStatementImpl(ctx.getRawArgument(), substatements);
     }
 
+    @Override
+    protected DefValStatement attachDeclarationReference(final DefValStatement stmt,
+            final DeclarationReference reference) {
+        return new RefDefValStatement(stmt, reference);
+    }
+
     @Override
     protected DefValEffectiveStatement createEffective(final Current<String, DefValStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 1f348a1c174cf06a5b6e7b3b2a421de58388cb9e..b36dc96a9f9119ad46ecb4fb0b7a284875de5d03 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
+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.parser.api.YangParserConfiguration;
@@ -41,6 +42,12 @@ public final class DisplayHintStatementSupport
         return new DisplayHintStatementImpl(ctx.getRawArgument(), substatements);
     }
 
+    @Override
+    protected DisplayHintStatement attachDeclarationReference(final DisplayHintStatement stmt,
+            final DeclarationReference reference) {
+        return new RefDisplayHintStatement(stmt, reference);
+    }
+
     @Override
     protected DisplayHintEffectiveStatement createEffective(final Current<String, DisplayHintStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 0cd2f046708c419e78d8cf276fdd8259ec484eee..32b489aa0310163270159e33a6788a9a66dc76df 100644 (file)
@@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableList;
 import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping;
 import org.opendaylight.yangtools.rfc6643.model.api.ImpliedEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement;
+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.parser.api.YangParserConfiguration;
@@ -41,6 +42,12 @@ public final class ImpliedStatementSupport
         return new ImpliedStatementImpl(ctx.getRawArgument(), substatements);
     }
 
+    @Override
+    protected ImpliedStatement attachDeclarationReference(final ImpliedStatement stmt,
+            final DeclarationReference reference) {
+        return new RefImpliedStatement(stmt, reference);
+    }
+
     @Override
     protected ImpliedEffectiveStatement createEffective(final Current<String, ImpliedStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 10a711edba9ba14c6c09eeba56f7b6914c3ecc08..abcb1faf23049f49cf394a635b4afc48e85710ed 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMappi
 import org.opendaylight.yangtools.rfc6643.model.api.MaxAccess;
 import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+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.parser.api.YangParserConfiguration;
@@ -58,6 +59,12 @@ public final class MaxAccessStatementSupport
         return new MaxAccessStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected MaxAccessStatement attachDeclarationReference(final MaxAccessStatement stmt,
+            final DeclarationReference reference) {
+        return new RefMaxAccessStatement(stmt, reference);
+    }
+
     @Override
     protected MaxAccessEffectiveStatement createEffective(final Current<MaxAccess, MaxAccessStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
similarity index 84%
rename from yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidIdStatementImpl.java
rename to yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementImpl.java
index 6b0ad54ca7ee48dfb102388799a7ba8034d3176f..6d6d8c7c091fab0bc7a6e1d6348fc8c653762ed1 100644 (file)
@@ -13,8 +13,8 @@ import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.ArgumentToString.WithSubstatements;
 
-final class OidIdStatementImpl extends WithSubstatements<ObjectIdentifier> implements OidStatement {
-    OidIdStatementImpl(final ObjectIdentifier argument,
+final class OidStatementImpl extends WithSubstatements<ObjectIdentifier> implements OidStatement {
+    OidStatementImpl(final ObjectIdentifier argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         super(argument, substatements);
     }
index 6bff52c2762b1078eea5cdfbd33a55c083eb0103..260232e8b64f2486cbe8d051e81d8307bcc836f6 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMappi
 import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
 import org.opendaylight.yangtools.rfc6643.model.api.OidEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+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.parser.api.YangParserConfiguration;
@@ -49,7 +50,12 @@ public final class OidStatementSupport
     @Override
     protected OidStatement createDeclared(final StmtContext<ObjectIdentifier, OidStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new OidIdStatementImpl(ctx.getArgument(), substatements);
+        return new OidStatementImpl(ctx.getArgument(), substatements);
+    }
+
+    @Override
+    protected OidStatement attachDeclarationReference(final OidStatement stmt, final DeclarationReference reference) {
+        return new RefOidStatement(stmt, reference);
     }
 
     @Override
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefAliasStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefAliasStatement.java
new file mode 100644 (file)
index 0000000..8b7337b
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.AliasStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefAliasStatement extends AbstractRefStatement<String, AliasStatement> implements AliasStatement {
+    RefAliasStatement(final AliasStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDefValStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDefValStatement.java
new file mode 100644 (file)
index 0000000..0533155
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefDefValStatement extends AbstractRefStatement<String, DefValStatement> implements DefValStatement {
+    RefDefValStatement(final DefValStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDisplayHintStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefDisplayHintStatement.java
new file mode 100644 (file)
index 0000000..d398d6a
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefDisplayHintStatement extends AbstractRefStatement<String, DisplayHintStatement>
+        implements DisplayHintStatement {
+    RefDisplayHintStatement(final DisplayHintStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefImpliedStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefImpliedStatement.java
new file mode 100644 (file)
index 0000000..743bb69
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefImpliedStatement extends AbstractRefStatement<String, ImpliedStatement> implements ImpliedStatement {
+    RefImpliedStatement(final ImpliedStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefMaxAccessStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefMaxAccessStatement.java
new file mode 100644 (file)
index 0000000..1fce7fc
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccess;
+import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefMaxAccessStatement extends AbstractRefStatement<MaxAccess, MaxAccessStatement>
+        implements MaxAccessStatement {
+    RefMaxAccessStatement(final MaxAccessStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefOidStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefOidStatement.java
new file mode 100644 (file)
index 0000000..b9ee6fd
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.ObjectIdentifier;
+import org.opendaylight.yangtools.rfc6643.model.api.OidStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefOidStatement extends AbstractRefStatement<ObjectIdentifier, OidStatement> implements OidStatement {
+    RefOidStatement(final OidStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefSubIdStatement.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/RefSubIdStatement.java
new file mode 100644 (file)
index 0000000..c4deb55
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc6643.parser;
+
+import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefSubIdStatement extends AbstractRefStatement<Uint32, SubIdStatement> implements SubIdStatement {
+    RefSubIdStatement(final SubIdStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
index 34e2181929cd3436f0f8f07bc9823dfeda8a2ac5..33e39d4797444c202727f6a38a8061ec5cceaf7f 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMappi
 import org.opendaylight.yangtools.rfc6643.model.api.SubIdEffectiveStatement;
 import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement;
 import org.opendaylight.yangtools.yang.common.Uint32;
+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.parser.api.YangParserConfiguration;
@@ -47,6 +48,12 @@ public final class SubIdStatementSupport
         return new SubIdStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected SubIdStatement attachDeclarationReference(final SubIdStatement stmt,
+            final DeclarationReference reference) {
+        return new RefSubIdStatement(stmt, reference);
+    }
+
     @Override
     protected SubIdEffectiveStatement createEffective(final Current<Uint32, SubIdStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationEffectiveStatementImpl.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationEffectiveStatementImpl.java
new file mode 100644 (file)
index 0000000..b011315
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc7952.parser;
+
+import static com.google.common.base.Verify.verifyNotNull;
+
+import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.rfc7952.model.api.AnnotationEffectiveStatement;
+import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode;
+import org.opendaylight.yangtools.rfc7952.model.api.AnnotationStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypeBuilder;
+import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypes;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
+import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
+import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+
+final class AnnotationEffectiveStatementImpl extends UnknownEffectiveStatementBase<QName, AnnotationStatement>
+        implements AnnotationEffectiveStatement, AnnotationSchemaNode {
+    private final @NonNull TypeDefinition<?> type;
+    private final @Nullable SchemaPath path;
+
+    AnnotationEffectiveStatementImpl(final Current<QName, AnnotationStatement> stmt,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(stmt, substatements);
+        final QName qname = stmt.getArgument();
+
+        // FIXME: move this into onFullDefinitionDeclared()
+        final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
+            firstSubstatementOfType(TypeEffectiveStatement.class), stmt,
+            "AnnotationStatementSupport %s is missing a 'type' statement", qname);
+
+        final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
+            qname);
+        final UnitsEffectiveStatement unitsStmt = firstSubstatementOfType(UnitsEffectiveStatement.class);
+        if (unitsStmt != null) {
+            builder.setUnits(unitsStmt.argument());
+        }
+        type = builder.build();
+
+        path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
+    }
+
+    @Override
+    public QName getQName() {
+        return verifyNotNull(argument());
+    }
+
+    @Override
+    @Deprecated
+    public SchemaPath getPath() {
+        return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
+    }
+
+    @Override
+    public TypeDefinition<?> getType() {
+        return type;
+    }
+
+    @Override
+    public TypeDefinition<?> getTypeDefinition() {
+        return type;
+    }
+
+    @Override
+    public AnnotationEffectiveStatement asEffectiveStatement() {
+        return this;
+    }
+}
\ No newline at end of file
diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementImpl.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementImpl.java
new file mode 100644 (file)
index 0000000..237c4e1
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc7952.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.rfc7952.model.api.AnnotationStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+final class AnnotationStatementImpl extends WithSubstatements implements AnnotationStatement {
+    AnnotationStatementImpl(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}
\ No newline at end of file
index 9d275b28250af65d5182afe54b452212efab8c95..bca16f5423f0f84892baefd594ed31490675c738 100644 (file)
@@ -7,33 +7,19 @@
  */
 package org.opendaylight.yangtools.rfc7952.parser;
 
-import static com.google.common.base.Verify.verifyNotNull;
-
 import com.google.common.collect.ImmutableList;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.rfc7952.model.api.AnnotationEffectiveStatement;
-import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode;
 import org.opendaylight.yangtools.rfc7952.model.api.AnnotationStatement;
 import org.opendaylight.yangtools.rfc7952.model.api.MetadataStatements;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 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.meta.StatementDefinition;
-import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypeBuilder;
-import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypes;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
 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.SchemaPathSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
@@ -42,67 +28,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 public final class AnnotationStatementSupport
          extends AbstractStatementSupport<QName, AnnotationStatement, AnnotationEffectiveStatement> {
-
-    private static final class Declared extends WithSubstatements implements AnnotationStatement {
-        Declared(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(argument, substatements);
-        }
-    }
-
-    private static final class Effective extends UnknownEffectiveStatementBase<QName, AnnotationStatement>
-            implements AnnotationEffectiveStatement, AnnotationSchemaNode {
-
-        private final @NonNull TypeDefinition<?> type;
-        private final @Nullable SchemaPath path;
-
-        Effective(final Current<QName, AnnotationStatement> stmt,
-                  final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-            super(stmt, substatements);
-            final QName qname = stmt.getArgument();
-
-            // FIXME: move this into onFullDefinitionDeclared()
-            final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
-                firstSubstatementOfType(TypeEffectiveStatement.class), stmt,
-                "AnnotationStatementSupport %s is missing a 'type' statement", qname);
-
-            final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
-                qname);
-            final UnitsEffectiveStatement unitsStmt = firstSubstatementOfType(UnitsEffectiveStatement.class);
-            if (unitsStmt != null) {
-                builder.setUnits(unitsStmt.argument());
-            }
-            type = builder.build();
-
-            path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
-        }
-
-        @Override
-        public QName getQName() {
-            return verifyNotNull(argument());
-        }
-
-        @Override
-        @Deprecated
-        public SchemaPath getPath() {
-            return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
-        }
-
-        @Override
-        public TypeDefinition<?> getType() {
-            return type;
-        }
-
-        @Override
-        public TypeDefinition<?> getTypeDefinition() {
-            return type;
-        }
-
-        @Override
-        public AnnotationEffectiveStatement asEffectiveStatement() {
-            return this;
-        }
-    }
-
     private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(MetadataStatements.ANNOTATION)
         .addMandatory(YangStmtMapping.TYPE)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -136,12 +61,18 @@ public final class AnnotationStatementSupport
     @Override
     protected AnnotationStatement createDeclared(final StmtContext<QName, AnnotationStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new Declared(ctx.getArgument(), substatements);
+        return new AnnotationStatementImpl(ctx.getArgument(), substatements);
+    }
+
+    @Override
+    protected AnnotationStatement attachDeclarationReference(final AnnotationStatement stmt,
+            final DeclarationReference reference) {
+        return new RefAnnotationStatement(stmt, reference);
     }
 
     @Override
     protected AnnotationEffectiveStatement createEffective(final Current<QName, AnnotationStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
-        return new Effective(stmt, substatements);
+        return new AnnotationEffectiveStatementImpl(stmt, substatements);
     }
 }
diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/RefAnnotationStatement.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/RefAnnotationStatement.java
new file mode 100644 (file)
index 0000000..8cb52c4
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc7952.parser;
+
+import org.opendaylight.yangtools.rfc7952.model.api.AnnotationStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefAnnotationStatement extends AbstractRefStatement<QName, AnnotationStatement>
+        implements AnnotationStatement {
+    RefAnnotationStatement(final AnnotationStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/RefYangDataStatement.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/RefYangDataStatement.java
new file mode 100644 (file)
index 0000000..1e9aef7
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc8040.parser;
+
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefYangDataStatement extends AbstractRefStatement<String, YangDataStatement> implements YangDataStatement {
+    RefYangDataStatement(final YangDataStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementImpl.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementImpl.java
new file mode 100644 (file)
index 0000000..4582ac8
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc8040.parser;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
+
+/**
+ * Declared statement representation of 'yang-data' extension defined in
+ * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
+ */
+final class YangDataStatementImpl extends WithSubstatements implements YangDataStatement {
+    YangDataStatementImpl(final String rawArgument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(rawArgument, substatements);
+    }
+}
\ No newline at end of file
index ab5262a356f94e50da59dc3027106d797de39212..72df7beedffbef377683728dd1844483184baa83 100644 (file)
@@ -18,10 +18,10 @@ import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatements;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QName;
 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.DataTreeEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@@ -36,16 +36,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 @Beta
 public final class YangDataStatementSupport
         extends AbstractStringStatementSupport<YangDataStatement, YangDataEffectiveStatement> {
-    /**
-     * Declared statement representation of 'yang-data' extension defined in
-     * <a href="https://tools.ietf.org/html/rfc8040#section-8">RFC 8040</a>.
-     */
-    private static final class Declared extends WithSubstatements implements YangDataStatement {
-        Declared(final String rawArgument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-            super(rawArgument, substatements);
-        }
-    }
-
     private final SubstatementValidator declaredValidator;
 
     public YangDataStatementSupport(final YangParserConfiguration config) {
@@ -91,7 +81,13 @@ public final class YangDataStatementSupport
     @Override
     protected YangDataStatement createDeclared(@NonNull final StmtContext<String, YangDataStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new Declared(ctx.getRawArgument(), substatements);
+        return new YangDataStatementImpl(ctx.getRawArgument(), substatements);
+    }
+
+    @Override
+    protected YangDataStatement attachDeclarationReference(final YangDataStatement stmt,
+            final DeclarationReference reference) {
+        return new RefYangDataStatement(stmt, reference);
     }
 
     @Override
index 93c3df00ef6447c8da5ddfdebaf3005510031870..0a35a86ae75ca1f29c910c0dce1b8cd7eb4afc1f 100644 (file)
@@ -15,6 +15,7 @@ import org.opendaylight.yangtools.rfc8528.model.api.SchemaMountStatements;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 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.meta.StatementDefinition;
@@ -82,6 +83,12 @@ public final class MountPointStatementSupport
         return new MountPointStatementImpl(ctx.getArgument(), substatements);
     }
 
+    @Override
+    protected MountPointStatement attachDeclarationReference(final MountPointStatement stmt,
+            final DeclarationReference reference) {
+        return new RefMountPointStatement(stmt, reference);
+    }
+
     @Override
     protected MountPointEffectiveStatement createEffective(final Current<QName, MountPointStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
diff --git a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/RefMountPointStatement.java b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/RefMountPointStatement.java
new file mode 100644 (file)
index 0000000..10f1392
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.rfc8528.parser;
+
+import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
+
+final class RefMountPointStatement extends AbstractRefStatement<QName, MountPointStatement>
+        implements MountPointStatement {
+    RefMountPointStatement(final MountPointStatement delegate, final DeclarationReference ref) {
+        super(delegate, ref);
+    }
+}
index 5b994e66888ff6fedfea72eb6c8aeeabb20b3986..204cb33b14b712b77b499df95993fc8c131a3e66 100644 (file)
@@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull;
 
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -23,7 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
  * @param <D> Class representing declared version of this statement.
  */
 public abstract class AbstractRefStatement<A, D extends DeclaredStatement<A>>
-        extends ForwardingDeclaredStatement<A, D> {
+        extends ForwardingDeclaredStatement<A, D> implements Delegator<D> {
     private final @NonNull DeclarationReference ref;
     private final @NonNull D delegate;
 
@@ -37,6 +38,11 @@ public abstract class AbstractRefStatement<A, D extends DeclaredStatement<A>>
         return Optional.of(ref);
     }
 
+    @Override
+    public final D getDelegate() {
+        return delegate;
+    }
+
     @Override
     protected final D delegate() {
         return delegate;
index 53b90566904d5bc6b0ce641098347720deea793c..212acc5c1b69ab00d8b0e26675c86e495b445b05 100644 (file)
@@ -68,11 +68,7 @@ public abstract class AbstractStatementSupport<A, D extends DeclaredStatement<A>
      * @param reference {@link DeclarationReference} to attach
      * @return Equivalent of stmt, potentially with specified reference attached.
      */
-    // FIXME: make this method abstract
-    protected @NonNull D attachDeclarationReference(final @NonNull D stmt,
-            final @NonNull DeclarationReference reference) {
-        return stmt;
-    }
+    protected abstract @NonNull D attachDeclarationReference(@NonNull D stmt, @NonNull DeclarationReference reference);
 
     @Override
     public final E createEffective(final Current<A, D> stmt,