X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2Feffective%2FAbstractEffectiveDocumentedDataNodeContainer.java;h=de640644cd12bd69efca2c3df6e8b17f41d9a3b4;hb=04fa25a4fe8957f6492618aa9a1e9a4f9af39df4;hp=f0b521e21bc00e3df10866f5608572b60e821fbc;hpb=6af38a495f688cbfa0ff2c09db7e62e4d530bb3a;p=yangtools.git
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java
index f0b521e21b..de640644cd 100644
--- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java
+++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AbstractEffectiveDocumentedDataNodeContainer.java
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
@@ -7,15 +7,13 @@
*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
-import com.google.common.collect.ImmutableSet;
-
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import java.util.Collection;
-import java.util.HashMap;
import java.util.HashSet;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
import java.util.Set;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
@@ -23,16 +21,19 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.UsesNode;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-public abstract class AbstractEffectiveDocumentedDataNodeContainer>
+abstract class AbstractEffectiveDocumentedDataNodeContainer>
extends AbstractEffectiveDocumentedNode implements
DataNodeContainer {
- private final ImmutableMap childNodes;
- private final ImmutableSet groupings;
- private final ImmutableSet uses;
- private final ImmutableSet> typeDefinitions;
- private final ImmutableSet publicChildNodes;
+ private final Map childNodes;
+ private final Set groupings;
+ private final Set uses;
+ private final Set> typeDefinitions;
+ private final Set publicChildNodes;
protected AbstractEffectiveDocumentedDataNodeContainer(
final StmtContext ctx) {
@@ -40,38 +41,54 @@ public abstract class AbstractEffectiveDocumentedDataNodeContainer> effectiveSubstatements = effectiveSubstatements();
- HashMap childNodes = new HashMap();
- HashSet groupings = new HashSet();
- HashSet uses = new HashSet();
- HashSet> typeDefinitions = new HashSet>();
- HashSet publicChildNodes = new HashSet();
+ Map mutableChildNodes = new LinkedHashMap<>();
+ Set mutableGroupings = new HashSet<>();
+ Set mutableUses = new HashSet<>();
+ Set> mutableTypeDefinitions = new LinkedHashSet<>();
+ Set mutablePublicChildNodes = new LinkedHashSet<>();
for (EffectiveStatement, ?> effectiveStatement : effectiveSubstatements) {
if (effectiveStatement instanceof DataSchemaNode) {
- DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
-
- childNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
- publicChildNodes.add(dataSchemaNode);
+ final DataSchemaNode dataSchemaNode = (DataSchemaNode) effectiveStatement;
+ if (!mutableChildNodes.containsKey(dataSchemaNode.getQName())) {
+ mutableChildNodes.put(dataSchemaNode.getQName(), dataSchemaNode);
+ mutablePublicChildNodes.add(dataSchemaNode);
+ } else {
+ throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+ }
}
if (effectiveStatement instanceof UsesNode) {
UsesNode usesNode = (UsesNode) effectiveStatement;
- uses.add(usesNode);
+ if (!mutableUses.contains(usesNode)) {
+ mutableUses.add(usesNode);
+ } else {
+ throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+ }
}
- if (effectiveStatement instanceof TypeDefinition) {
- TypeDefinition> typeDef = (TypeDefinition>) effectiveStatement;
- typeDefinitions.add(typeDef);
+ if (effectiveStatement instanceof TypeDefEffectiveStatementImpl) {
+ TypeDefEffectiveStatementImpl typeDef = (TypeDefEffectiveStatementImpl) effectiveStatement;
+ TypeDefinition> type = typeDef.getTypeDefinition();
+ if (!mutableTypeDefinitions.contains(type)) {
+ mutableTypeDefinitions.add(type);
+ } else {
+ throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+ }
}
if (effectiveStatement instanceof GroupingDefinition) {
GroupingDefinition grp = (GroupingDefinition) effectiveStatement;
- groupings.add(grp);
+ if (!mutableGroupings.contains(grp)) {
+ mutableGroupings.add(grp);
+ } else {
+ throw EffectiveStmtUtils.createNameCollisionSourceException(ctx, effectiveStatement);
+ }
}
}
- this.childNodes = ImmutableMap.copyOf(childNodes);
- this.groupings = ImmutableSet.copyOf(groupings);
- this.publicChildNodes = ImmutableSet.copyOf(publicChildNodes);
- this.typeDefinitions = ImmutableSet.copyOf(typeDefinitions);
- this.uses = ImmutableSet.copyOf(uses);
+ this.childNodes = ImmutableMap.copyOf(mutableChildNodes);
+ this.groupings = ImmutableSet.copyOf(mutableGroupings);
+ this.publicChildNodes = ImmutableSet.copyOf(mutablePublicChildNodes);
+ this.typeDefinitions = ImmutableSet.copyOf(mutableTypeDefinitions);
+ this.uses = ImmutableSet.copyOf(mutableUses);
}
@Override