Updated parser to check if unknown node is defined as language extension. 23/923/3
authorMartin Vitez <mvitez@cisco.com>
Tue, 20 Aug 2013 12:45:49 +0000 (14:45 +0200)
committerMartin Vitez <mvitez@cisco.com>
Tue, 20 Aug 2013 13:01:54 +0000 (15:01 +0200)
Fixed NPE in GroupingDefinitionDependencySort.

Change-Id: Ic7f89fa203c9d408f270baf9d518dc2961fac22e
Signed-off-by: Martin Vitez <mvitez@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/GroupingDefinitionDependencySort.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/UnknownSchemaNodeBuilder.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserWithContextTest.java
yang/yang-parser-impl/src/test/resources/context-test/test3.yang
yang/yang-parser-impl/src/test/resources/model/custom.yang
yang/yang-parser-impl/src/test/resources/model/nodes.yang
yang/yang-parser-impl/src/test/resources/types/custom-types-test@2012-4-4.yang

index cfae12617e79320f91365566a71adf54d7b1a762..bb928f13d55dbc7e9b7fb2204188afab0041c485 100644 (file)
@@ -64,12 +64,15 @@ public class GroupingDefinitionDependencySort {
             final GroupingNode groupingNode = (GroupingNode) node;
             final GroupingDefinition groupingDefinition = groupingNode.getGroupingDefinition();
 
-            Set<UsesNode> usesNodes =getAllUsesNodes(groupingDefinition);
+            Set<UsesNode> usesNodes = getAllUsesNodes(groupingDefinition);
             for (UsesNode usesNode : usesNodes) {
                 SchemaPath schemaPath = usesNode.getGroupingPath();
                 if (schemaPath != null) {
                     Node nodeTo = nodeMap.get(schemaPath);
-                    groupingNode.addEdge(nodeTo);
+                    if (nodeTo != null) {
+                        groupingNode.addEdge(nodeTo);
+                    }
+
                 }
             }
         }
@@ -78,31 +81,30 @@ public class GroupingDefinitionDependencySort {
     }
 
     private static Set<UsesNode> getAllUsesNodes(DataNodeContainer container) {
-       Set<UsesNode> ret = new HashSet<>();
-       ret.addAll(container.getUses());
-       
-       Set<GroupingDefinition> groupings = container.getGroupings();
-       for (GroupingDefinition groupingDefinition : groupings) {
-                       ret.addAll(getAllUsesNodes(groupingDefinition));
-               }
-       Set<DataSchemaNode> children = container.getChildNodes();
-       for (DataSchemaNode dataSchemaNode : children) {
-               if(dataSchemaNode instanceof DataNodeContainer) {
-                       ret.addAll(getAllUsesNodes((DataNodeContainer) dataSchemaNode));
-               } else if (dataSchemaNode instanceof ChoiceNode) {
-                       Set<ChoiceCaseNode> cases = ((ChoiceNode) dataSchemaNode).getCases();
-                       for (ChoiceCaseNode choiceCaseNode : cases) {
-                                       ret.addAll(getAllUsesNodes(choiceCaseNode));
-                               }
-               
-               }
-               }
-       
-       return ret;
-    
+        Set<UsesNode> ret = new HashSet<>();
+        ret.addAll(container.getUses());
+
+        Set<GroupingDefinition> groupings = container.getGroupings();
+        for (GroupingDefinition groupingDefinition : groupings) {
+            ret.addAll(getAllUsesNodes(groupingDefinition));
+        }
+        Set<DataSchemaNode> children = container.getChildNodes();
+        for (DataSchemaNode dataSchemaNode : children) {
+            if (dataSchemaNode instanceof DataNodeContainer) {
+                ret.addAll(getAllUsesNodes((DataNodeContainer) dataSchemaNode));
+            } else if (dataSchemaNode instanceof ChoiceNode) {
+                Set<ChoiceCaseNode> cases = ((ChoiceNode) dataSchemaNode).getCases();
+                for (ChoiceCaseNode choiceCaseNode : cases) {
+                    ret.addAll(getAllUsesNodes(choiceCaseNode));
+                }
+
+            }
+        }
+
+        return ret;
+
     }
-    
-    
+
     private static final class GroupingNode extends NodeImpl {
         private final GroupingDefinition groupingDefinition;
 
index 68e1cf4b74b923603a2cf18112d1c46ef49eb50c..4a58f7adf5dbbd2f8eb3a938e93241552a3226ee 100644 (file)
@@ -110,6 +110,17 @@ public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
         this.extensionBuilder = extension;
     }
 
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(nodeType.getPrefix());
+        sb.append(":");
+        sb.append(nodeType.getLocalName());
+        sb.append(" ");
+        sb.append(nodeParameter);
+        return sb.toString();
+    }
+
     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
         private final QName qname;
         private SchemaPath path;
@@ -218,10 +229,12 @@ public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
 
         @Override
         public String toString() {
-            StringBuilder sb = new StringBuilder(UnknownSchemaNodeImpl.class.getSimpleName());
-            sb.append("[");
-            sb.append(qname);
-            sb.append("]");
+            StringBuilder sb = new StringBuilder();
+            sb.append(nodeType.getPrefix());
+            sb.append(":");
+            sb.append(nodeType.getLocalName());
+            sb.append(" ");
+            sb.append(nodeParameter);
             return sb.toString();
         }
     }
index 1021139555f0d19fdfdee4b4bad1841bf57b3078..4bd6f20ffa49f5b2c6bff03290c668d39b245951 100644 (file)
@@ -844,8 +844,8 @@ public final class YangParserImpl implements YangModelParser {
                     }
                 }
             } catch (YangParseException e) {
-                LOG.debug(module.getName(), usnb.getLine(), "Failed to find unknown node extension definition: "
-                        + nodeType);
+                throw new YangParseException(module.getName(), usnb.getLine(), "Failed to resolve node " + usnb
+                        + ": no such extension definition found.");
             }
         }
     }
@@ -877,8 +877,8 @@ public final class YangParserImpl implements YangModelParser {
                 }
 
             } catch (YangParseException e) {
-                LOG.debug(module.getName(), usnb.getLine(), "Failed to find unknown node extension definition: "
-                        + nodeType);
+                throw new YangParseException(module.getName(), usnb.getLine(), "Failed to resolve node " + usnb
+                        + ": no such extension definition found.");
             }
 
         }
index e2b79a989f673ffd2628295931c6dfabf247f6a1..1ffe85365b66632d3d84268983fff41417872337 100644 (file)
@@ -321,6 +321,7 @@ public class YangParserWithContextTest {
         assertEquals("custom", unType.getPrefix());
         assertEquals("mountpoint", unType.getLocalName());
         assertEquals("point", un.getNodeParameter());
+        assertNotNull(un.getExtensionDefinition());
     }
 
     @Test
index 01e7c7a03d41413f41ff98b0dfa091e7b66ef5ff..f694682fc205b29f3da2a89b22c596938955e6e2 100644 (file)
@@ -19,7 +19,6 @@ module test3 {
     
     container network {
         custom:mountpoint point {
-            mnt:target-ref target;
         }
         
         description "network-description";
index 0444b5c848bd9b00b05f446422dc95f9d5941b1a..03e3f081ea3708d1ef7aa00febc10e44d9fb0934 100644 (file)
@@ -48,8 +48,7 @@ module custom {
     }
 
     container network {
-        mnt:mountpoint point {
-            mnt:target-ref target;
+        c-define point {
         }
 
         description "network-description";
@@ -131,7 +130,7 @@ module custom {
             anyxml filter {
                 description
                   "Subtree or XPath filter to use.";
-                   nc:get-filter-element-attributes;
+                   c:c-define element-attributes;
             }
         }
 
index 4d4dde4ea5d5ffaa6a70fd385b1625fe73708af5..73fc9718a1dcdd49af7ec338cf5f65715b33e2d4 100644 (file)
@@ -47,7 +47,7 @@ module nodes {
     }
 
     container ext {
-        types:c-define "MY_INTERFACES";
+        c:c-define "MY_INTERFACES";
     }
 
     leaf union-leaf {
index c3652282737d6ee79abf7d8a58d6b51d56f69794..7479e377720b2f358c6b1b14300f56f24574e177 100644 (file)
@@ -9,6 +9,13 @@ module custom-types-test {
         revision 2012-04-16 {
     }
 
+    extension mountpoint {
+        description "enter point";
+        argument "name" {
+            yin-element "true";
+        }
+    }
+
     typedef access-operations-type {
         type bits {
             bit create {