X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fparser%2Fimpl%2FYangParserImpl.java;h=ec46831b4fba538f1a1359c917efc8311eac4db4;hp=85ca36791d79237615a6ec28d278d1b3ec1591c6;hb=53e740af349a154f3f1a6b8c041303446f599718;hpb=9090a5876e0540b12d30e4cdf29f8be25208b489 diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/impl/YangParserImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/impl/YangParserImpl.java index 85ca36791d..ec46831b4f 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/impl/YangParserImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/parser/impl/YangParserImpl.java @@ -800,8 +800,7 @@ public class YangParserImpl implements YangModelParser { ParserUtils.refineList(list, refine, line); usesNode.addRefineNode(list); } else if (refineTarget instanceof LeafListSchemaNodeBuilder) { - final LeafListSchemaNodeBuilder leafList = (LeafListSchemaNodeBuilder) getRefineNodeBuilderCopy( - groupingName, refine, modules, module); + final LeafListSchemaNodeBuilder leafList = (LeafListSchemaNodeBuilder) refineTarget; ParserUtils.refineLeafList(leafList, refine, line); usesNode.addRefineNode(leafList); } else if (refineTarget instanceof ChoiceBuilder) { @@ -812,6 +811,10 @@ public class YangParserImpl implements YangModelParser { final AnyXmlBuilder anyXml = (AnyXmlBuilder) refineTarget; ParserUtils.refineAnyxml(anyXml, refine, line); usesNode.addRefineNode(anyXml); + } else if(refineTarget instanceof GroupingBuilder) { + usesNode.addRefineNode((GroupingBuilder)refineTarget); + } else if(refineTarget instanceof TypedefBuilder) { + usesNode.addRefineNode((TypedefBuilder)refineTarget); } } } @@ -861,6 +864,12 @@ public class YangParserImpl implements YangModelParser { } else if (lookedUpBuilder instanceof AnyXmlBuilder) { result = ParserUtils .copyAnyXmlBuilder((AnyXmlBuilder) lookedUpBuilder); + } else if (lookedUpBuilder instanceof GroupingBuilder) { + result = ParserUtils + .copyGroupingBuilder((GroupingBuilder) lookedUpBuilder); + } else if (lookedUpBuilder instanceof TypeDefinitionBuilder) { + result = ParserUtils + .copyTypedefBuilder((TypedefBuilder) lookedUpBuilder); } else { throw new YangParseException(module.getName(), refine.getLine(), "Target '" + refine.getName() + "' can not be refined"); @@ -873,8 +882,8 @@ public class YangParserImpl implements YangModelParser { * * @param groupingPath * path to grouping which contains node to refine - * @param refineNodeName - * name of node to be refined + * @param refine + * object containing refine information * @param modules * all loaded modules * @param module @@ -886,6 +895,7 @@ public class YangParserImpl implements YangModelParser { final RefineHolder refine, final Map> modules, final ModuleBuilder module) { + final String refineNodeName = refine.getName(); final SchemaPath path = ParserUtils.parseUsesPath(groupingPath); final List builderPath = new ArrayList(); String prefix = null; @@ -904,7 +914,26 @@ public class YangParserImpl implements YangModelParser { final GroupingBuilder builder = (GroupingBuilder) dependentModule .getNode(builderPath); - return builder.getChildNode(refine.getName()); + Builder result = builder.getChildNode(refineNodeName); + if(result == null) { + Set grps = builder.getGroupings(); + for(GroupingBuilder gr : grps) { + if(gr.getQName().getLocalName().equals(refineNodeName)) { + result = gr; + break; + } + } + } + if(result == null) { + Set typedefs = builder.getTypedefs(); + for(TypeDefinitionBuilder typedef : typedefs) { + if(typedef.getQName().getLocalName().equals(refineNodeName)) { + result = typedef; + break; + } + } + } + return result; } private QName findFullQName(