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%2Fbuilder%2Fimpl%2FModuleBuilder.java;h=79e992028dc52f7e2ee3f299393f9b9e7e9c7f19;hb=42abb28b99a02f9580f4676ce5c315628e5bcd24;hp=db1babd6dc08ef8242c4aa37c81232224ebbc8e8;hpb=896fc5f2bddbb6c394516529511096c7745f3b96;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java index db1babd6dc..79e992028d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/ModuleBuilder.java @@ -1,16 +1,17 @@ /* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2013 Cisco Systems, Inc. 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.yang.parser.builder.impl; +import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; - import java.io.IOException; -import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.Collections; @@ -22,10 +23,9 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; - -import org.apache.commons.io.IOUtils; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; @@ -61,15 +61,20 @@ import org.opendaylight.yangtools.yang.parser.util.YangParseException; * Builder of Module object. If this module is dependent on external * module/modules, these dependencies must be resolved before module is built, * otherwise result may not be valid. + * + * @deprecated Pre-Beryllium implementation, scheduled for removal. */ +@Deprecated public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DocumentedNodeBuilder { - + private static final QNameModule EMPTY_QNAME_MODULE = QNameModule.create(null, null).intern(); + private static final String GROUPING_STR = "Grouping"; + private static final String TYPEDEF_STR = "typedef"; private ModuleImpl instance; private final String name; private final String sourcePath; private static final SchemaPath SCHEMA_PATH = SchemaPath.create(Collections. emptyList(), true); private String prefix; - private QNameModule qnameModule = QNameModule.create(null, null); + private QNameModule qnameModule = EMPTY_QNAME_MODULE; private final boolean submodule; private String belongsTo; @@ -81,6 +86,10 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im final Map imports = new HashMap<>(); final Map importedModules = new HashMap<>(); + final Set addedSubmodules = new HashSet<>(); + final Set submodules = new HashSet<>(); + final Map includedModules = new HashMap<>(); + private final Set augments = new LinkedHashSet<>(); private final List augmentBuilders = new ArrayList<>(); private final List allAugments = new ArrayList<>(); @@ -129,7 +138,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public ModuleBuilder(final Module base) { - super(base.getName(), 0, QName.create(base.getQNameModule(), base.getPrefix(), base.getName()), + super(base.getName(), 0, QName.create(base.getQNameModule(), base.getName()), SCHEMA_PATH, base); this.name = base.getName(); this.sourcePath = base.getModuleSourcePath(); @@ -171,6 +180,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im buildChildren(); + // SUBMODULES + for (ModuleBuilder submodule : addedSubmodules) { + submodules.add(submodule.build()); + } + // FEATURES for (FeatureBuilder fb : addedFeatures) { features.add(fb.build()); @@ -338,7 +352,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setNamespace(final URI namespace) { - this.qnameModule = QNameModule.create(namespace, qnameModule.getRevision()); + this.qnameModule = QNameModule.create(namespace, qnameModule.getRevision()).intern(); } public String getPrefix() { @@ -366,6 +380,18 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im importedModules.put(prefix, module); } + public Map getIncludedModules() { + return includedModules; + } + + public void addInclude(final String name, final Date revision) { + includedModules.put(name, revision); + } + + public void addSubmodule(final ModuleBuilder submodule) { + addedSubmodules.add(submodule); + } + protected String getSource() { return source; } @@ -388,7 +414,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setRevision(final Date revision) { - this.qnameModule = QNameModule.create(qnameModule.getNamespace(), revision); + this.qnameModule = QNameModule.create(qnameModule.getNamespace(), revision).intern(); } public void setPrefix(final String prefix) { @@ -410,7 +436,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public void addModuleImport(final String moduleName, final Date revision, final String prefix) { checkPrefix(prefix); checkNotSealed(); - final ModuleImport moduleImport = createModuleImport(moduleName, revision, prefix); + final ModuleImport moduleImport = new ModuleImportImpl(moduleName, revision, prefix); imports.put(prefix, moduleImport); } @@ -425,8 +451,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ExtensionBuilder addExtension(final QName qname, final int line, final SchemaPath path) { checkNotSealed(); - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "extension can be defined only in module or submodule"); } @@ -437,7 +463,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } final ExtensionBuilder builder = new ExtensionBuilderImpl(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedExtensions.add(builder); return builder; } @@ -446,9 +472,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final ContainerSchemaNodeBuilder builder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -457,9 +483,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final ListSchemaNodeBuilder builder = new ListSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); allLists.add(builder); return builder; @@ -469,9 +495,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final LeafSchemaNodeBuilder builder = new LeafSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -480,9 +506,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final LeafListSchemaNodeBuilder builder = new LeafListSchemaNodeBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -491,31 +517,31 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotSealed(); final GroupingBuilder builder = new GroupingBuilderImpl(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); String groupingName = qname.getLocalName(); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { for (GroupingBuilder addedGrouping : getGroupingBuilders()) { if (addedGrouping.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, addedGrouping.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, addedGrouping.getLine()); } } addGrouping(builder); } else { - if (parent instanceof DataNodeContainerBuilder) { - DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parent; + if (parentBuilder instanceof DataNodeContainerBuilder) { + DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parentBuilder; for (GroupingBuilder addedGrouping : parentNode.getGroupingBuilders()) { if (addedGrouping.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, addedGrouping.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, addedGrouping.getLine()); } } parentNode.addGrouping(builder); - } else if (parent instanceof RpcDefinitionBuilder) { - RpcDefinitionBuilder parentNode = (RpcDefinitionBuilder) parent; + } else if (parentBuilder instanceof RpcDefinitionBuilder) { + RpcDefinitionBuilder parentNode = (RpcDefinitionBuilder) parentBuilder; for (GroupingBuilder child : parentNode.getGroupings()) { if (child.getQName().getLocalName().equals(groupingName)) { - raiseYangParserException("", "Grouping", groupingName, line, child.getLine()); + raiseYangParserException("", GROUPING_STR, groupingName, line, child.getLine()); } } parentNode.addGrouping(builder); @@ -528,14 +554,16 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return builder; } - public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, final int order) { + public AugmentationSchemaBuilder addAugment(final int line, final String augmentTargetStr, + final SchemaPath targetPath, final int order) { checkNotSealed(); - final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, order); + final AugmentationSchemaBuilder builder = new AugmentationSchemaBuilderImpl(name, line, augmentTargetStr, + targetPath, order); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { // augment can be declared only under 'module' ... if (!(augmentTargetStr.startsWith("/"))) { throw new YangParseException( @@ -546,13 +574,13 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im augmentBuilders.add(builder); } else { // ... or 'uses' statement - if (parent instanceof UsesNodeBuilder) { + if (parentBuilder instanceof UsesNodeBuilder) { if (augmentTargetStr.startsWith("/")) { throw new YangParseException(name, line, "If 'augment' statement is a substatement to the 'uses' statement, it cannot contain absolute path (" + augmentTargetStr + ")"); } - ((UsesNodeBuilder) parent).addAugment(builder); + ((UsesNodeBuilder) parentBuilder).addAugment(builder); } else { throw new YangParseException(name, line, "Augment can be declared only under module or uses statement."); } @@ -562,22 +590,22 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im return builder; } - public UsesNodeBuilder addUsesNode(final int line, final String groupingPathStr) { + public UsesNodeBuilder addUsesNode(final int line, final SchemaPath grouping) { checkNotSealed(); - final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, groupingPathStr); + final UsesNodeBuilder usesBuilder = new UsesNodeBuilderImpl(name, line, grouping); - Builder parent = getActualNode(); - usesBuilder.setParent(parent); + Builder parentBuilder = getActualNode(); + usesBuilder.setParent(parentBuilder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addUsesNode(usesBuilder); } else { - if (!(parent instanceof DataNodeContainerBuilder)) { - throw new YangParseException(name, line, "Unresolved parent of uses '" + groupingPathStr + "'."); + if (!(parentBuilder instanceof DataNodeContainerBuilder)) { + throw new YangParseException(name, line, "Unresolved parent of uses '" + grouping + "'."); } - ((DataNodeContainerBuilder) parent).addUsesNode(usesBuilder); + ((DataNodeContainerBuilder) parentBuilder).addUsesNode(usesBuilder); } - if (parent instanceof AugmentationSchemaBuilder) { + if (parentBuilder instanceof AugmentationSchemaBuilder) { usesBuilder.setAugmenting(true); } @@ -587,23 +615,23 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public void addRefine(final RefineHolderImpl refine) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof UsesNodeBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof UsesNodeBuilder)) { throw new YangParseException(name, refine.getLine(), "refine can be defined only in uses statement"); } - ((UsesNodeBuilder) parent).addRefine(refine); - refine.setParent(parent); + ((UsesNodeBuilder) parentBuilder).addRefine(refine); + refine.setParent(parentBuilder); } public RpcDefinitionBuilder addRpc(final int line, final QName qname, final SchemaPath path) { checkNotSealed(); - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "rpc can be defined only in module or submodule"); } final RpcDefinitionBuilder rpcBuilder = new RpcDefinitionBuilder(name, line, qname, path); - rpcBuilder.setParent(parent); + rpcBuilder.setParent(parentBuilder); String rpcName = qname.getLocalName(); checkNotConflictingInDataNamespace(rpcName, line); @@ -631,11 +659,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ContainerSchemaNodeBuilder addRpcInput(final int line, final QName qname, final SchemaPath schemaPath) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof RpcDefinitionBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof RpcDefinitionBuilder)) { throw new YangParseException(name, line, "input can be defined only in rpc statement"); } - final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parent; + final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parentBuilder; final ContainerSchemaNodeBuilder inputBuilder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); inputBuilder.setParent(rpc); @@ -646,11 +674,11 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ContainerSchemaNodeBuilder addRpcOutput(final SchemaPath schemaPath, final QName qname, final int line) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent instanceof RpcDefinitionBuilder)) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof RpcDefinitionBuilder)) { throw new YangParseException(name, line, "output can be defined only in rpc statement"); } - final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parent; + final RpcDefinitionBuilder rpc = (RpcDefinitionBuilder) parentBuilder; final ContainerSchemaNodeBuilder outputBuilder = new ContainerSchemaNodeBuilder(name, line, qname, schemaPath); outputBuilder.setParent(rpc); @@ -666,8 +694,8 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public NotificationBuilder addNotification(final int line, final QName qname, final SchemaPath path) { checkNotSealed(); - final Builder parent = getActualNode(); - if (!(parent.equals(this))) { + final Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "notification can be defined only in module or submodule"); } @@ -675,20 +703,20 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im checkNotConflictingInDataNamespace(notificationName, line); final NotificationBuilder builder = new NotificationBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedNotifications.add(builder); return builder; } public FeatureBuilder addFeature(final int line, final QName qname, final SchemaPath path) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "feature can be defined only in module or submodule"); } final FeatureBuilder builder = new FeatureBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); String featureName = qname.getLocalName(); for (FeatureBuilder addedFeature : addedFeatures) { @@ -703,26 +731,26 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public ChoiceBuilder addChoice(final int line, final QName qname, final SchemaPath path) { final ChoiceBuilder builder = new ChoiceBuilder(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } public ChoiceCaseBuilder addCase(final int line, final QName qname, final SchemaPath path) { - Builder parent = getActualNode(); - if (parent == null || parent.equals(this)) { + Builder parentBuilder = getActualNode(); + if (parentBuilder == null || parentBuilder.equals(this)) { throw new YangParseException(name, line, "'case' parent not found"); } final ChoiceCaseBuilder builder = new ChoiceCaseBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); - if (parent instanceof ChoiceBuilder) { - ((ChoiceBuilder) parent).addCase(builder); - } else if (parent instanceof AugmentationSchemaBuilder) { - ((AugmentationSchemaBuilder) parent).addChildNode(builder); + if (parentBuilder instanceof ChoiceBuilder) { + ((ChoiceBuilder) parentBuilder).addCase(builder); + } else if (parentBuilder instanceof AugmentationSchemaBuilder) { + ((AugmentationSchemaBuilder) parentBuilder).addChildNode(builder); } else { throw new YangParseException(name, line, "Unresolved parent of 'case' " + qname.getLocalName()); } @@ -733,9 +761,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public AnyXmlBuilder addAnyXml(final int line, final QName qname, final SchemaPath schemaPath) { final AnyXmlBuilder builder = new AnyXmlBuilder(name, line, qname, schemaPath); - Builder parent = getActualNode(); - builder.setParent(parent); - addChildToParent(parent, builder, qname.getLocalName()); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); + addChildToParent(parentBuilder, builder, qname.getLocalName()); return builder; } @@ -745,7 +773,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im String nodeName = typedefBuilder.getQName().getLocalName(); for (TypeDefinitionBuilder tdb : getTypeDefinitionBuilders()) { if (tdb.getQName().getLocalName().equals(nodeName)) { - raiseYangParserException("", "typedef", nodeName, typedefBuilder.getLine(), tdb.getLine()); + raiseYangParserException("", TYPEDEF_STR, nodeName, typedefBuilder.getLine(), tdb.getLine()); } } super.addTypedef(typedefBuilder); @@ -754,26 +782,26 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public TypeDefinitionBuilderImpl addTypedef(final int line, final QName qname, final SchemaPath path) { final TypeDefinitionBuilderImpl builder = new TypeDefinitionBuilderImpl(name, line, qname, path); - Builder parent = getActualNode(); - builder.setParent(parent); + Builder parentBuilder = getActualNode(); + builder.setParent(parentBuilder); String typedefName = qname.getLocalName(); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addTypedef(builder); } else { - if (parent instanceof DataNodeContainerBuilder) { - DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parent; + if (parentBuilder instanceof DataNodeContainerBuilder) { + DataNodeContainerBuilder parentNode = (DataNodeContainerBuilder) parentBuilder; for (TypeDefinitionBuilder child : parentNode.getTypeDefinitionBuilders()) { if (child.getQName().getLocalName().equals(typedefName)) { - raiseYangParserException("", "typedef", typedefName, line, child.getLine()); + raiseYangParserException("", TYPEDEF_STR, typedefName, line, child.getLine()); } } parentNode.addTypedef(builder); - } else if (parent instanceof RpcDefinitionBuilder) { - RpcDefinitionBuilder rpcParent = (RpcDefinitionBuilder) parent; + } else if (parentBuilder instanceof RpcDefinitionBuilder) { + RpcDefinitionBuilder rpcParent = (RpcDefinitionBuilder) parentBuilder; for (TypeDefinitionBuilder tdb : rpcParent.getTypeDefinitions()) { if (tdb.getQName().getLocalName().equals(builder.getQName().getLocalName())) { - raiseYangParserException("", "typedef", typedefName, line, tdb.getLine()); + raiseYangParserException("", TYPEDEF_STR, typedefName, line, tdb.getLine()); } } rpcParent.addTypedef(builder); @@ -786,22 +814,22 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setType(final TypeDefinition type) { - Builder parent = getActualNode(); - if (!(parent instanceof TypeAwareBuilder)) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder instanceof TypeAwareBuilder)) { throw new YangParseException("Failed to set type '" + type.getQName().getLocalName() - + "'. Invalid parent node: " + parent); + + "'. Invalid parent node: " + parentBuilder); } - ((TypeAwareBuilder) parent).setType(type); + ((TypeAwareBuilder) parentBuilder).setType(type); } public UnionTypeBuilder addUnionType(final int line, final QNameModule module) { - final Builder parent = getActualNode(); - if (parent == null) { + final Builder parentBuilder = getActualNode(); + if (parentBuilder == null) { throw new YangParseException(name, line, "Unresolved parent of union type"); } else { final UnionTypeBuilder union = new UnionTypeBuilder(name, line); - if (parent instanceof TypeAwareBuilder) { - ((TypeAwareBuilder) parent).setTypedef(union); + if (parentBuilder instanceof TypeAwareBuilder) { + ((TypeAwareBuilder) parentBuilder).setTypedef(union); return union; } else { throw new YangParseException(name, line, "Invalid parent of union type."); @@ -812,12 +840,12 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public void addIdentityrefType(final int line, final SchemaPath schemaPath, final String baseString) { final IdentityrefTypeBuilder identityref = new IdentityrefTypeBuilder(name, line, baseString, schemaPath); - final Builder parent = getActualNode(); - if (parent == null) { + final Builder parentBuilder = getActualNode(); + if (parentBuilder == null) { throw new YangParseException(name, line, "Unresolved parent of identityref type."); } else { - if (parent instanceof TypeAwareBuilder) { - final TypeAwareBuilder typeParent = (TypeAwareBuilder) parent; + if (parentBuilder instanceof TypeAwareBuilder) { + final TypeAwareBuilder typeParent = (TypeAwareBuilder) parentBuilder; typeParent.setTypedef(identityref); dirtyNodes.add(typeParent); } else { @@ -826,21 +854,21 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } - public DeviationBuilder addDeviation(final int line, final String targetPath) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + public DeviationBuilder addDeviation(final int line, final SchemaPath targetPath) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "deviation can be defined only in module or submodule"); } final DeviationBuilder builder = new DeviationBuilder(name, line, targetPath); - builder.setParent(parent); + builder.setParent(parentBuilder); deviationBuilders.add(builder); return builder; } public IdentitySchemaNodeBuilder addIdentity(final QName qname, final int line, final SchemaPath path) { - Builder parent = getActualNode(); - if (!(parent.equals(this))) { + Builder parentBuilder = getActualNode(); + if (!(parentBuilder.equals(this))) { throw new YangParseException(name, line, "identity can be defined only in module or submodule"); } String identityName = qname.getLocalName(); @@ -851,7 +879,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } final IdentitySchemaNodeBuilder builder = new IdentitySchemaNodeBuilder(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); addedIdentities.add(builder); return builder; } @@ -863,20 +891,20 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public UnknownSchemaNodeBuilderImpl addUnknownSchemaNode(final int line, final QName qname, final SchemaPath path) { - final Builder parent = getActualNode(); + final Builder parentBuilder = getActualNode(); final UnknownSchemaNodeBuilderImpl builder = new UnknownSchemaNodeBuilderImpl(name, line, qname, path); - builder.setParent(parent); + builder.setParent(parentBuilder); allUnknownNodes.add(builder); - if (parent.equals(this)) { + if (parentBuilder.equals(this)) { addedUnknownNodes.add(builder); } else { - if (parent instanceof SchemaNodeBuilder) { - parent.addUnknownNodeBuilder(builder); - } else if (parent instanceof DataNodeContainerBuilder) { - parent.addUnknownNodeBuilder(builder); - } else if (parent instanceof RefineHolderImpl) { - parent.addUnknownNodeBuilder(builder); + if (parentBuilder instanceof SchemaNodeBuilder) { + parentBuilder.addUnknownNodeBuilder(builder); + } else if (parentBuilder instanceof DataNodeContainerBuilder) { + parentBuilder.addUnknownNodeBuilder(builder); + } else if (parentBuilder instanceof RefineHolderImpl) { + parentBuilder.addUnknownNodeBuilder(builder); } else { throw new YangParseException(name, line, "Unresolved parent of unknown node '" + qname.getLocalName() + "'"); @@ -908,9 +936,7 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } public void setSource(final ByteSource byteSource) throws IOException { - try (InputStream stream = byteSource.openStream()) { - setSource(IOUtils.toString(stream)); - } + setSource(byteSource.asCharSource(Charsets.UTF_8).read()); } public void setSource(final String source) { @@ -1029,10 +1055,6 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im } } - private ModuleImport createModuleImport(final String moduleName, final Date revision, final String prefix) { - return new ModuleImportImpl(moduleName, revision, prefix); - } - private void raiseYangParserException(final String cantAddType, final String type, final String name, final int currentLine, final int duplicateLine) { @@ -1052,9 +1074,9 @@ public class ModuleBuilder extends AbstractDocumentedDataNodeContainerBuilder im public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + Objects.hashCode(name); result = prime * result + qnameModule.hashCode(); - result = prime * result + ((prefix == null) ? 0 : prefix.hashCode()); + result = prime * result + Objects.hashCode(prefix); return result; }