Fix StmtContext nullness problems
[yangtools.git] / yang / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / AbstractEffectiveDocumentedDataNodeContainer.java
index 5cccb68fa596272142327a7944bd6ee8df7de03f..ad8dea7b8e5725978c2e0c5ec2454c39c397c179 100644 (file)
@@ -19,7 +19,7 @@ import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -30,12 +30,12 @@ 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.TypedefEffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ImplicitChoiceCaseNode;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ImplicitCaseSchemaNode;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
 
 public abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends DeclaredStatement<A>>
-        extends AbstractEffectiveDocumentedNode<A, D> implements DataNodeContainer {
+        extends AbstractSchemaEffectiveDocumentedNode<A, D> implements DataNodeContainer {
 
     private final Map<QName, DataSchemaNode> childNodes;
     private final Set<GroupingDefinition> groupings;
@@ -55,24 +55,22 @@ public abstract class AbstractEffectiveDocumentedDataNodeContainer<A, D extends
         for (EffectiveStatement<?, ?> stmt : effectiveSubstatements()) {
             if (stmt instanceof DataSchemaNode) {
                 final DataSchemaNode dataSchemaNode = (DataSchemaNode) stmt;
-                if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
-                    /**
-                     * Add case short hand when augmenting choice with short hand
-                     **/
-                    if (this instanceof AugmentationSchemaNode
-                            && !(stmt instanceof ChoiceCaseNode || stmt instanceof ChoiceSchemaNode)
-                            && YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmt.statementDefinition())
-                            && Boolean.TRUE.equals(ctx.getFromNamespace(AugmentToChoiceNamespace.class, ctx))) {
-                        final ImplicitChoiceCaseNode caseShorthand = new ImplicitChoiceCaseNode(dataSchemaNode);
-                        mutableChildNodes.put(caseShorthand.getQName(), caseShorthand);
-                        mutablePublicChildNodes.add(caseShorthand);
-                    } else {
-                        mutableChildNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
-                        mutablePublicChildNodes.add(dataSchemaNode);
-                    }
-                } else {
+                if (mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
                     throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, stmt);
                 }
+
+                //  Add case short hand when augmenting choice with short hand
+                if (this instanceof AugmentationSchemaNode
+                        && !(stmt instanceof CaseSchemaNode || stmt instanceof ChoiceSchemaNode)
+                        && YangValidationBundles.SUPPORTED_CASE_SHORTHANDS.contains(stmt.statementDefinition())
+                        && Boolean.TRUE.equals(ctx.getFromNamespace(AugmentToChoiceNamespace.class, ctx))) {
+                    final ImplicitCaseSchemaNode caseShorthand = new ImplicitCaseSchemaNode(dataSchemaNode);
+                    mutableChildNodes.put(caseShorthand.getQName(), caseShorthand);
+                    mutablePublicChildNodes.add(caseShorthand);
+                } else {
+                    mutableChildNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
+                    mutablePublicChildNodes.add(dataSchemaNode);
+                }
             }
             if (stmt instanceof UsesNode) {
                 UsesNode usesNode = (UsesNode) stmt;