X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=code-generator%2Fbinding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fsal%2Fbinding%2Fgenerator%2Fimpl%2FBindingGeneratorImpl.java;h=66f3bc042408f6a475a772aa41ef78541aabbbab;hb=3f754cccb393b989bafb8b194edf9da0ec3e9e8a;hp=b98c48c9844f0b5067aeae72cd1894b9efd43b9c;hpb=9234f3d039be43cfbac2c5cc924ec2bbd6b9ab6c;p=yangtools.git
diff --git a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java
index b98c48c984..66f3bc0424 100644
--- a/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java
+++ b/code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java
@@ -12,7 +12,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.computeDefaultSUID;
import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.packageNameForGeneratedType;
-import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.parseToValidParamName;
import static org.opendaylight.yangtools.binding.generator.util.BindingTypes.DATA_OBJECT;
import static org.opendaylight.yangtools.binding.generator.util.BindingTypes.DATA_ROOT;
import static org.opendaylight.yangtools.binding.generator.util.BindingTypes.IDENTIFIABLE;
@@ -27,6 +26,7 @@ import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findD
import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findNodeInSchemaContext;
import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule;
+import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
@@ -72,7 +72,7 @@ import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -95,8 +95,10 @@ import org.opendaylight.yangtools.yang.model.api.UsesNode;
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.BaseTypes;
import org.opendaylight.yangtools.yang.model.util.DataNodeIterator;
import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
+import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils;
import org.opendaylight.yangtools.yang.model.util.UnionType;
import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
import org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort;
@@ -108,6 +110,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
private static final Splitter COLON_SPLITTER = Splitter.on(':');
private static final Splitter BSDOT_SPLITTER = Splitter.on("\\.");
private static final char NEW_LINE = '\n';
+ private static final String QNAME_FQCN = QName.class.getName();
/**
* Constant with the concrete name of identifier.
@@ -211,7 +214,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
*
* - are generated from
context
schema nodes and
* - are also part of some of the module in
modules
- * set .
+ * set.
*
* @throws IllegalArgumentException
*
@@ -229,20 +232,20 @@ public class BindingGeneratorImpl implements BindingGenerator {
schemaContext = context;
typeProvider = new TypeProviderImpl(context);
- Module[] modulesArray = new Module[context.getModules().size()];
+ final Module[] modulesArray = new Module[context.getModules().size()];
context.getModules().toArray(modulesArray);
final List contextModules = ModuleDependencySort.sort(modulesArray);
genTypeBuilders = new HashMap<>();
- for (Module contextModule : contextModules) {
+ for (final Module contextModule : contextModules) {
moduleToGenTypes(contextModule, context);
}
- for (Module contextModule : contextModules) {
+ for (final Module contextModule : contextModules) {
allAugmentsToGenTypes(contextModule);
}
final List filteredGenTypes = new ArrayList<>();
- for (Module m : modules) {
+ for (final Module m : modules) {
final ModuleContext ctx = checkNotNull(genCtx.get(m), "Module context not found for module %s", m);
filteredGenTypes.addAll(ctx.getGeneratedTypes());
final Set additionalTypes = ((TypeProviderImpl) typeProvider).getAdditionalTypes().get(m);
@@ -291,12 +294,14 @@ public class BindingGeneratorImpl implements BindingGenerator {
final List> typeDefinitions = it.allTypedefs();
checkState(typeDefinitions != null, "Type Definitions for module «module.name» cannot be NULL.");
- for (TypeDefinition> typedef : typeDefinitions) {
+ for (final TypeDefinition> typedef : typeDefinitions) {
if (typedef != null) {
final Type type = ((TypeProviderImpl) typeProvider).generatedTypeForExtendedDefinitionType(typedef,
typedef);
if (type != null) {
- genCtx.get(module).addTypedefType(typedef.getPath(), type);
+ final ModuleContext ctx = genCtx.get(module);
+ ctx.addTypedefType(typedef.getPath(), type);
+ ctx.addTypeToSchema(type,typedef);
}
}
}
@@ -318,61 +323,23 @@ public class BindingGeneratorImpl implements BindingGenerator {
genCtx.get(module).addChildNodeType(node, genType);
groupingsToGenTypes(module, ((DataNodeContainer) node).getGroupings());
processUsesAugments((DataNodeContainer) node, module);
- if (node.isAddedByUses() || node.isAugmenting())
- genType.setSuitableForBoxing(false);
}
return genType;
}
- private boolean hasWhenOrMustConstraints(final SchemaNode node) {
- boolean hasWhenCondition;
- boolean hasMustConstraints;
-
- if (node instanceof ContainerSchemaNode) {
- ContainerSchemaNode contNode = (ContainerSchemaNode)node;
- hasWhenCondition = contNode.getConstraints().getWhenCondition() != null;
- hasMustConstraints = !isNullOrEmpty(contNode.getConstraints().getMustConstraints());
-
- if (hasWhenCondition || hasMustConstraints)
- return true;
- }
- return false;
- }
-
private void containerToGenType(final Module module, final String basePackageName,
final GeneratedTypeBuilder parent, final GeneratedTypeBuilder childOf, final ContainerSchemaNode node) {
final GeneratedTypeBuilder genType = processDataSchemaNode(module, basePackageName, childOf, node);
-
if (genType != null) {
constructGetter(parent, node.getQName().getLocalName(), node.getDescription(), genType);
resolveDataSchemaNodes(module, basePackageName, genType, genType, node.getChildNodes());
-
- final String parentName = parent.getName();
- final String childOfName = childOf.getName();
-
- if (parent != null && !parent.getName().contains("Data"))
- genType.setParentType(parent);
- genType.setSuitableForBoxing(hasOnlyOneChild(node) && !hasWhenOrMustConstraints(node));
-
- if (parentName.equals(childOfName))
- genType.setSuitableForBoxing(false);
}
}
- private boolean hasOnlyOneChild(final ContainerSchemaNode contNode) {
- if (!isNullOrEmpty(contNode.getChildNodes()) && contNode.getChildNodes().size() == 1)
- return true;
- return false;
- }
-
private void listToGenType(final Module module, final String basePackageName, final GeneratedTypeBuilder parent,
final GeneratedTypeBuilder childOf, final ListSchemaNode node) {
final GeneratedTypeBuilder genType = processDataSchemaNode(module, basePackageName, childOf, node);
-
if (genType != null) {
- if (!parent.getName().equals(childOf) && !parent.getName().contains("Data")) {
- genType.setParentType(parent);
- }
constructGetter(parent, node.getQName().getLocalName(), node.getDescription(), Types.listTypeFor(genType));
final List listKeys = listKeys(node);
@@ -385,7 +352,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
genType.addImplementsType(identifiableMarker);
}
- for (DataSchemaNode schemaNode : node.getChildNodes()) {
+ for (final DataSchemaNode schemaNode : node.getChildNodes()) {
if (!schemaNode.isAugmenting()) {
addSchemaNodeToListBuilders(basePackageName, schemaNode, genType, genTOBuilder, listKeys, module);
}
@@ -404,8 +371,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
private void processUsesAugments(final DataNodeContainer node, final Module module) {
final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule());
- for (UsesNode usesNode : node.getUses()) {
- for (AugmentationSchema augment : usesNode.getAugmentations()) {
+ for (final UsesNode usesNode : node.getUses()) {
+ for (final AugmentationSchema augment : usesNode.getAugmentations()) {
usesAugmentationToGenTypes(basePackageName, augment, module, usesNode, node);
processUsesAugments(augment, module);
}
@@ -434,7 +401,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule());
final List augmentations = resolveAugmentations(module);
- for (AugmentationSchema augment : augmentations) {
+ for (final AugmentationSchema augment : augmentations) {
augmentationToGenTypes(basePackageName, augment, module);
}
}
@@ -458,7 +425,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
checkState(module.getAugmentations() != null, "Augmentations Set cannot be NULL.");
final Set augmentations = module.getAugmentations();
- List sortedAugmentations = new ArrayList<>(augmentations);
+ final List sortedAugmentations = new ArrayList<>(augmentations);
Collections.sort(sortedAugmentations, Comparators.AUGMENT_COMP);
return sortedAugmentations;
@@ -516,10 +483,10 @@ public class BindingGeneratorImpl implements BindingGenerator {
interfaceBuilder.addImplementsType(Types.typeForClass(RpcService.class));
interfaceBuilder.setDescription(createDescription(rpcDefinitions, module.getName(), module.getModuleSourcePath()));
- for (RpcDefinition rpc : rpcDefinitions) {
+ for (final RpcDefinition rpc : rpcDefinitions) {
if (rpc != null) {
final String rpcName = BindingMapping.getClassName(rpc.getQName());
- final String rpcMethodName = parseToValidParamName(rpcName);
+ final String rpcMethodName = BindingMapping.getPropertyName(rpcName);
final String rpcComment = rpc.getDescription();
final MethodSignatureBuilder method = interfaceBuilder.addMethod(rpcMethodName);
final ContainerSchemaNode input = rpc.getInput();
@@ -587,7 +554,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
- for (NotificationDefinition notification : notifications) {
+ for (final NotificationDefinition notification : notifications) {
if (notification != null) {
processUsesAugments(notification, module);
@@ -627,7 +594,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule());
if (schemaIdentities != null && !schemaIdentities.isEmpty()) {
- for (IdentitySchemaNode identity : schemaIdentities) {
+ for (final IdentitySchemaNode identity : schemaIdentities) {
identityToGenType(module, basePackageName, identity, context);
}
}
@@ -689,7 +656,9 @@ public class BindingGeneratorImpl implements BindingGenerator {
private static Constant qnameConstant(final GeneratedTypeBuilderBase> toBuilder, final String constantName,
final QName name) {
- StringBuilder sb = new StringBuilder("org.opendaylight.yangtools.yang.common.QName");
+ final StringBuilder sb = new StringBuilder(QNAME_FQCN);
+ sb.append(".cachedReference(");
+ sb.append(QNAME_FQCN);
sb.append(".create(");
sb.append('"');
sb.append(name.getNamespace());
@@ -697,7 +666,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
sb.append(name.getFormattedRevision());
sb.append("\",\"");
sb.append(name.getLocalName());
- sb.append("\");");
+ sb.append("\"))");
return toBuilder.addConstant(typeForClass(QName.class), constantName, sb.toString());
}
@@ -719,7 +688,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
final String basePackageName = BindingMapping.getRootPackageName(module.getQNameModule());
final List groupingsSortedByDependencies = new GroupingDefinitionDependencySort()
.sort(groupings);
- for (GroupingDefinition grouping : groupingsSortedByDependencies) {
+ for (final GroupingDefinition grouping : groupingsSortedByDependencies) {
groupingToGenType(basePackageName, grouping, module);
}
}
@@ -761,17 +730,21 @@ public class BindingGeneratorImpl implements BindingGenerator {
* builder
* @param typeBuilder
* GeneratedTypeBuilder to which will be enum builder assigned
+ * @param module
+ * Module in which type should be generated
* @return enumeration builder which contains data from
* enumTypeDef
*/
private EnumBuilder resolveInnerEnumFromTypeDefinition(final EnumTypeDefinition enumTypeDef, final QName enumName,
- final GeneratedTypeBuilder typeBuilder) {
+ final GeneratedTypeBuilder typeBuilder, Module module) {
if ((enumTypeDef != null) && (typeBuilder != null) && (enumTypeDef.getQName() != null)
&& (enumTypeDef.getQName().getLocalName() != null)) {
final String enumerationName = BindingMapping.getClassName(enumName);
final EnumBuilder enumBuilder = typeBuilder.addEnumeration(enumerationName);
enumBuilder.setDescription(enumTypeDef.getDescription());
enumBuilder.updateEnumPairsFromEnumTypeDef(enumTypeDef);
+ ModuleContext ctx = genCtx.get(module);
+ ctx.addInnerTypedefType(enumTypeDef.getPath(), enumBuilder);
return enumBuilder;
}
return null;
@@ -861,15 +834,15 @@ public class BindingGeneratorImpl implements BindingGenerator {
throw new NullPointerException("Target type not yet generated: " + targetSchemaNode);
}
- if (!(targetSchemaNode instanceof ChoiceNode)) {
- String packageName = augmentPackageName;
+ if (!(targetSchemaNode instanceof ChoiceSchemaNode)) {
+ final String packageName = augmentPackageName;
final Type targetType = new ReferencedTypeImpl(targetTypeBuilder.getPackageName(),
targetTypeBuilder.getName());
addRawAugmentGenTypeDefinition(module, packageName, augmentPackageName, targetType, augSchema);
} else {
generateTypesFromAugmentedChoiceCases(module, augmentPackageName, targetTypeBuilder.toInstance(),
- (ChoiceNode) targetSchemaNode, augSchema.getChildNodes());
+ (ChoiceSchemaNode) targetSchemaNode, augSchema.getChildNodes());
}
}
@@ -882,7 +855,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
processUsesAugments(augSchema, module);
final SchemaPath targetPath = augSchema.getTargetPath();
- SchemaNode targetSchemaNode = findOriginalTargetFromGrouping(targetPath, usesNode);
+ final SchemaNode targetSchemaNode = findOriginalTargetFromGrouping(targetPath, usesNode);
if (targetSchemaNode == null) {
throw new IllegalArgumentException("augment target not found: " + targetPath);
}
@@ -894,9 +867,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
if (targetTypeBuilder == null) {
throw new NullPointerException("Target type not yet generated: " + targetSchemaNode);
}
- targetTypeBuilder.setSuitableForBoxing(false);
- if (!(targetSchemaNode instanceof ChoiceNode)) {
+ if (!(targetSchemaNode instanceof ChoiceSchemaNode)) {
String packageName = augmentPackageName;
if (usesNodeParent instanceof SchemaNode) {
packageName = packageNameForGeneratedType(augmentPackageName, ((SchemaNode) usesNodeParent).getPath(),
@@ -906,7 +878,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
augSchema);
} else {
generateTypesFromAugmentedChoiceCases(module, augmentPackageName, targetTypeBuilder.toInstance(),
- (ChoiceNode) targetSchemaNode, augSchema.getChildNodes());
+ (ChoiceSchemaNode) targetSchemaNode, augSchema.getChildNodes());
}
}
@@ -920,21 +892,21 @@ public class BindingGeneratorImpl implements BindingGenerator {
* @return node from its original location in grouping
*/
private DataSchemaNode findOriginalTargetFromGrouping(final SchemaPath targetPath, final UsesNode parentUsesNode) {
- SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, parentUsesNode.getGroupingPath()
+ final SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, parentUsesNode.getGroupingPath()
.getPathFromRoot());
if (!(targetGrouping instanceof GroupingDefinition)) {
throw new IllegalArgumentException("Failed to generate code for augment in " + parentUsesNode);
}
- GroupingDefinition grouping = (GroupingDefinition) targetGrouping;
+ final GroupingDefinition grouping = (GroupingDefinition) targetGrouping;
SchemaNode result = grouping;
- for (QName node : targetPath.getPathFromRoot()) {
+ for (final QName node : targetPath.getPathFromRoot()) {
// finding by local name is valid, grouping cannot contain nodes
// with same name and different namespace
if (result instanceof DataNodeContainer) {
result = ((DataNodeContainer) result).getDataChildByName(node.getLocalName());
- } else if (result instanceof ChoiceNode) {
- result = ((ChoiceNode) result).getCaseNodeByName(node.getLocalName());
+ } else if (result instanceof ChoiceSchemaNode) {
+ result = ((ChoiceSchemaNode) result).getCaseNodeByName(node.getLocalName());
}
}
if (result == null) {
@@ -942,7 +914,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
boolean fromUses = ((DataSchemaNode) result).isAddedByUses();
- Iterator groupingUses = grouping.getUses().iterator();
+ final Iterator groupingUses = grouping.getUses().iterator();
while (groupingUses.hasNext() && fromUses) {
result = findOriginalTargetFromGrouping(targetPath, groupingUses.next());
if (result != null) {
@@ -1019,7 +991,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
* @return nodeParameter of UnknownSchemaNode
*/
private String getAugmentIdentifier(final List unknownSchemaNodes) {
- for (UnknownSchemaNode unknownSchemaNode : unknownSchemaNodes) {
+ for (final UnknownSchemaNode unknownSchemaNode : unknownSchemaNodes) {
final QName nodeType = unknownSchemaNode.getNodeType();
if (AUGMENT_IDENTIFIER_NAME.equals(nodeType.getLocalName())
&& YANG_EXT_NAMESPACE.equals(nodeType.getNamespace().toString())) {
@@ -1079,7 +1051,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
private GeneratedTypeBuilder resolveDataSchemaNodes(final Module module, final String basePackageName,
final GeneratedTypeBuilder parent, final GeneratedTypeBuilder childOf, final Iterable schemaNodes) {
if (schemaNodes != null && parent != null) {
- for (DataSchemaNode schemaNode : schemaNodes) {
+ for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting() && !schemaNode.isAddedByUses()) {
addSchemaNodeToBuilderAsMethod(basePackageName, schemaNode, parent, childOf, module);
}
@@ -1114,7 +1086,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
final GeneratedTypeBuilder typeBuilder, final GeneratedTypeBuilder childOf,
final Iterable schemaNodes) {
if ((schemaNodes != null) && (typeBuilder != null)) {
- for (DataSchemaNode schemaNode : schemaNodes) {
+ for (final DataSchemaNode schemaNode : schemaNodes) {
if (!schemaNode.isAugmenting()) {
addSchemaNodeToBuilderAsMethod(basePackageName, schemaNode, typeBuilder, childOf, module);
}
@@ -1144,15 +1116,15 @@ public class BindingGeneratorImpl implements BindingGenerator {
final GeneratedTypeBuilder typeBuilder, final GeneratedTypeBuilder childOf, final Module module) {
if (node != null && typeBuilder != null) {
if (node instanceof LeafSchemaNode) {
- resolveLeafSchemaNodeAsMethod(typeBuilder, (LeafSchemaNode) node);
+ resolveLeafSchemaNodeAsMethod(typeBuilder, (LeafSchemaNode) node, module);
} else if (node instanceof LeafListSchemaNode) {
- resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) node);
+ resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) node,module);
} else if (node instanceof ContainerSchemaNode) {
containerToGenType(module, basePackageName, typeBuilder, childOf, (ContainerSchemaNode) node);
} else if (node instanceof ListSchemaNode) {
listToGenType(module, basePackageName, typeBuilder, childOf, (ListSchemaNode) node);
- } else if (node instanceof ChoiceNode) {
- choiceToGeneratedType(module, basePackageName, typeBuilder, (ChoiceNode) node);
+ } else if (node instanceof ChoiceSchemaNode) {
+ choiceToGeneratedType(module, basePackageName, typeBuilder, (ChoiceSchemaNode) node);
} else {
// TODO: anyxml not yet supported
LOG.debug("Unable to add schema node {} as method in {}: unsupported type of node.", node.getClass(),
@@ -1185,7 +1157,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
*
*/
private void choiceToGeneratedType(final Module module, final String basePackageName,
- final GeneratedTypeBuilder parent, final ChoiceNode choiceNode) {
+ final GeneratedTypeBuilder parent, final ChoiceSchemaNode choiceNode) {
checkArgument(basePackageName != null, "Base Package Name cannot be NULL.");
checkArgument(choiceNode != null, "Choice Schema Node cannot be NULL.");
@@ -1195,7 +1167,6 @@ public class BindingGeneratorImpl implements BindingGenerator {
constructGetter(parent, choiceNode.getQName().getLocalName(), choiceNode.getDescription(),
choiceTypeBuilder);
choiceTypeBuilder.addImplementsType(typeForClass(DataContainer.class));
- choiceTypeBuilder.setParentType(parent);
genCtx.get(module).addChildNodeType(choiceNode, choiceTypeBuilder);
generateTypesFromChoiceCases(module, basePackageName, choiceTypeBuilder.toInstance(), choiceNode);
}
@@ -1229,7 +1200,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
*
*/
private void generateTypesFromChoiceCases(final Module module, final String basePackageName,
- final Type refChoiceType, final ChoiceNode choiceNode) {
+ final Type refChoiceType, final ChoiceSchemaNode choiceNode) {
checkArgument(basePackageName != null, "Base Package Name cannot be NULL.");
checkArgument(refChoiceType != null, "Referenced Choice Type cannot be NULL.");
checkArgument(choiceNode != null, "ChoiceNode cannot be NULL.");
@@ -1239,7 +1210,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
return;
}
- for (ChoiceCaseNode caseNode : caseNodes) {
+ for (final ChoiceCaseNode caseNode : caseNodes) {
if (caseNode != null && !caseNode.isAddedByUses() && !caseNode.isAugmenting()) {
final String packageName = packageNameForGeneratedType(basePackageName, caseNode.getPath());
final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode, module);
@@ -1248,9 +1219,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
genCtx.get(module).addChoiceToCaseMapping(refChoiceType, caseTypeBuilder, caseNode);
final Iterable caseChildNodes = caseNode.getChildNodes();
if (caseChildNodes != null) {
- Object parentNode = null;
final SchemaPath nodeSp = choiceNode.getPath();
- parentNode = findDataSchemaNode(schemaContext, nodeSp.getParent());
+ final Object parentNode = findDataSchemaNode(schemaContext, nodeSp.getParent());
SchemaNode parent;
if (parentNode instanceof AugmentationSchema) {
@@ -1273,6 +1243,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
final SchemaPath sp = choiceNode.getPath();
parent = findDataSchemaNode(schemaContext, sp.getParent());
}
+ Preconditions.checkState(parent != null, "Could not find Choice node parent "+choiceNode.getPath().getParent());
GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.getPath());
if (childOfType == null) {
childOfType = findGroupingByPath(parent.getPath());
@@ -1280,7 +1251,6 @@ public class BindingGeneratorImpl implements BindingGenerator {
resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes);
}
}
-
processUsesAugments(caseNode, module);
}
}
@@ -1313,12 +1283,12 @@ public class BindingGeneratorImpl implements BindingGenerator {
*
*/
private void generateTypesFromAugmentedChoiceCases(final Module module, final String basePackageName,
- final Type targetType, final ChoiceNode targetNode, final Iterable augmentedNodes) {
+ final Type targetType, final ChoiceSchemaNode targetNode, final Iterable augmentedNodes) {
checkArgument(basePackageName != null, "Base Package Name cannot be NULL.");
checkArgument(targetType != null, "Referenced Choice Type cannot be NULL.");
checkArgument(augmentedNodes != null, "Set of Choice Case Nodes cannot be NULL.");
- for (DataSchemaNode caseNode : augmentedNodes) {
+ for (final DataSchemaNode caseNode : augmentedNodes) {
if (caseNode != null) {
final String packageName = packageNameForGeneratedType(basePackageName, caseNode.getPath());
final GeneratedTypeBuilder caseTypeBuilder = addDefaultInterfaceDefinition(packageName, caseNode, module);
@@ -1369,6 +1339,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
* @param leaf
* leaf schema node which is mapped as getter method which is
* added to typeBuilder
+ * @param module
+ * Module in which type was defined
* @return boolean value
*
* - false - if
leaf
or typeBuilder
are
@@ -1376,7 +1348,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
* - true - in other cases
*
*/
- private Type resolveLeafSchemaNodeAsMethod(final GeneratedTypeBuilder typeBuilder, final LeafSchemaNode leaf) {
+ private Type resolveLeafSchemaNodeAsMethod(final GeneratedTypeBuilder typeBuilder, final LeafSchemaNode leaf, Module module) {
Type returnType = null;
if ((leaf != null) && (typeBuilder != null)) {
final String leafName = leaf.getQName().getLocalName();
@@ -1394,7 +1366,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef;
final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, leaf.getQName(),
- typeBuilder);
+ typeBuilder,module);
if (enumBuilder != null) {
returnType = enumBuilder.toInstance(typeBuilder);
@@ -1425,7 +1397,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
private void processContextRefExtension(final LeafSchemaNode leaf, final MethodSignatureBuilder getter,
final Module module) {
- for (UnknownSchemaNode node : leaf.getUnknownSchemaNodes()) {
+ for (final UnknownSchemaNode node : leaf.getUnknownSchemaNodes()) {
final QName nodeType = node.getNodeType();
if ("context-reference".equals(nodeType.getLocalName())) {
final String nodeParam = node.getNodeParameter();
@@ -1438,7 +1410,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
identity = findIdentityByName(module.getIdentities(), iterator.next());
basePackageName = BindingMapping.getRootPackageName(module.getQNameModule());
} else if (length == 2) {
- String prefix = iterator.next();
+ final String prefix = iterator.next();
final Module dependentModule = findModuleFromImports(module.getImports(), prefix);
if (dependentModule == null) {
throw new IllegalArgumentException("Failed to process context-reference: unknown prefix "
@@ -1466,7 +1438,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
private IdentitySchemaNode findIdentityByName(final Set identities, final String name) {
- for (IdentitySchemaNode id : identities) {
+ for (final IdentitySchemaNode id : identities) {
if (id.getQName().getLocalName().equals(name)) {
return id;
}
@@ -1475,7 +1447,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
private Module findModuleFromImports(final Set imports, final String prefix) {
- for (ModuleImport imp : imports) {
+ for (final ModuleImport imp : imports) {
if (imp.getPrefix().equals(prefix)) {
return schemaContext.findModuleByName(imp.getModuleName(), imp.getRevision());
}
@@ -1491,23 +1463,27 @@ public class BindingGeneratorImpl implements BindingGenerator {
if (leafDesc == null) {
leafDesc = "";
}
-
- if (leafName != null) {
- Type returnType = null;
- final TypeDefinition> typeDef = leaf.getType();
- if (typeDef instanceof UnionTypeDefinition) {
- // GeneratedType for this type definition should be already
- // created
- QName qname = typeDef.getQName();
- Module unionModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(),
- qname.getRevision());
- final ModuleContext mc = genCtx.get(unionModule);
- returnType = mc.getTypedefs().get(typeDef.getPath());
- } else {
- returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
- }
- return resolveLeafSchemaNodeAsProperty(toBuilder, leaf, returnType, isReadOnly);
+ Type returnType = null;
+ final TypeDefinition> typeDef = leaf.getType();
+ if (typeDef instanceof UnionTypeDefinition) {
+ // GeneratedType for this type definition should be already
+ // created
+ final QName qname = typeDef.getQName();
+ final Module unionModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(),
+ qname.getRevision());
+ final ModuleContext mc = genCtx.get(unionModule);
+ returnType = mc.getTypedefs().get(typeDef.getPath());
+ } else if (typeDef instanceof EnumTypeDefinition && BaseTypes.ENUMERATION_QNAME.equals(typeDef.getQName())) {
+ // Annonymous enumeration (already generated, since it is inherited via uses).
+ LeafSchemaNode originalLeaf = (LeafSchemaNode) SchemaNodeUtils.getRootOriginalIfPossible(leaf);
+ QName qname = originalLeaf.getQName();
+ final Module enumModule = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(),
+ qname.getRevision());
+ returnType = genCtx.get(enumModule).getInnerType(originalLeaf.getType().getPath());
+ } else {
+ returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
}
+ return resolveLeafSchemaNodeAsProperty(toBuilder, leaf, returnType, isReadOnly);
}
return false;
}
@@ -1540,7 +1516,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
final String leafName = leaf.getQName().getLocalName();
final String leafDesc = leaf.getDescription();
- final GeneratedPropertyBuilder propBuilder = toBuilder.addProperty(parseToValidParamName(leafName));
+ final GeneratedPropertyBuilder propBuilder = toBuilder.addProperty(BindingMapping.getPropertyName(leafName));
propBuilder.setReadOnly(isReadOnly);
propBuilder.setReturnType(returnType);
propBuilder.setComment(leafDesc);
@@ -1560,6 +1536,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
* @param node
* leaf list schema node which is added to
* typeBuilder
as getter method
+ * @param module
* @return boolean value
*
* - true - if
node
, typeBuilder
,
@@ -1567,7 +1544,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
* - false - other cases
*
*/
- private boolean resolveLeafListSchemaNode(final GeneratedTypeBuilder typeBuilder, final LeafListSchemaNode node) {
+ private boolean resolveLeafListSchemaNode(final GeneratedTypeBuilder typeBuilder, final LeafListSchemaNode node, Module module) {
if ((node != null) && (typeBuilder != null)) {
final QName nodeName = node.getQName();
@@ -1580,7 +1557,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, node);
final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef;
final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, nodeName,
- typeBuilder);
+ typeBuilder,module);
returnType = new ReferencedTypeImpl(enumBuilder.getPackageName(), enumBuilder.getName());
((TypeProviderImpl) typeProvider).putReferencedType(node.getPath(), returnType);
} else if (typeDef instanceof UnionType) {
@@ -1618,10 +1595,11 @@ public class BindingGeneratorImpl implements BindingGenerator {
genTOBuilder.setIsUnion(true);
((TypeProviderImpl) typeProvider).addUnitsToGenTO(genTOBuilder, typeDef.getUnits());
- // union builder
- final GeneratedTOBuilder unionBuilder = new GeneratedTOBuilderImpl(typeBuilder.getPackageName(),
- genTOBuilder.getName() + "Builder");
- unionBuilder.setIsUnionBuilder(true);
+
+
+ final GeneratedTOBuilder unionBuilder = createUnionBuilder(genTOBuilder,typeBuilder);
+
+
final MethodSignatureBuilder method = unionBuilder.addMethod("getDefaultInstance");
method.setReturnType(returnType);
method.addParameter(Types.STRING, "defaultValue");
@@ -1638,6 +1616,22 @@ public class BindingGeneratorImpl implements BindingGenerator {
return returnType.toInstance();
}
+ private GeneratedTOBuilder createUnionBuilder(final GeneratedTOBuilder genTOBuilder, final GeneratedTypeBuilder typeBuilder) {
+
+ final String outerCls = Types.getOuterClassName(genTOBuilder);
+ final StringBuilder name;
+ if(outerCls != null) {
+ name = new StringBuilder(outerCls);
+ } else {
+ name = new StringBuilder();
+ }
+ name.append(genTOBuilder.getName());
+ name.append("Builder");
+ final GeneratedTOBuilderImpl unionBuilder = new GeneratedTOBuilderImpl(typeBuilder.getPackageName(),name.toString());
+ unionBuilder.setIsUnionBuilder(true);
+ return unionBuilder;
+ }
+
private GeneratedTypeBuilder addDefaultInterfaceDefinition(final String packageName, final SchemaNode schemaNode,
final Module module) {
return addDefaultInterfaceDefinition(packageName, schemaNode, null, module);
@@ -1648,10 +1642,10 @@ public class BindingGeneratorImpl implements BindingGenerator {
* schemaNode
.
*
* The new builder always implements
- * {@link org.opendaylight.yangtools.yang.binding.DataObject DataObject}.
+ * {@link org.opendaylight.yangtools.yang.binding.DataObject DataObject}.
* If schemaNode
is instance of GroupingDefinition it also
* implements {@link org.opendaylight.yangtools.yang.binding.Augmentable
- * Augmentable}.
+ * Augmentable}.
* If schemaNode
is instance of
* {@link org.opendaylight.yangtools.yang.model.api.DataNodeContainer
* DataNodeContainer} it can also implement nodes which are specified in
@@ -1780,7 +1774,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
} else {
method.append("get");
}
- String name = BindingMapping.toFirstUpper(BindingMapping.getPropertyName(localName));
+ final String name = BindingMapping.toFirstUpper(BindingMapping.getPropertyName(localName));
method.append(name);
return method.toString();
}
@@ -1848,7 +1842,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
if (schemaNode instanceof LeafSchemaNode) {
final LeafSchemaNode leaf = (LeafSchemaNode) schemaNode;
final String leafName = leaf.getQName().getLocalName();
- final Type type = resolveLeafSchemaNodeAsMethod(typeBuilder, leaf);
+ final Type type = resolveLeafSchemaNodeAsMethod(typeBuilder, leaf,module);
if (listKeys.contains(leafName)) {
if (type == null) {
resolveLeafSchemaNodeAsProperty(genTOBuilder, leaf, true, module);
@@ -1858,11 +1852,11 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
} else if (!schemaNode.isAddedByUses()) {
if (schemaNode instanceof LeafListSchemaNode) {
- resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) schemaNode);
+ resolveLeafListSchemaNode(typeBuilder, (LeafListSchemaNode) schemaNode, module);
} else if (schemaNode instanceof ContainerSchemaNode) {
containerToGenType(module, basePackageName, typeBuilder, typeBuilder, (ContainerSchemaNode) schemaNode);
- } else if (schemaNode instanceof ChoiceNode) {
- choiceToGeneratedType(module, basePackageName, typeBuilder, (ChoiceNode) schemaNode);
+ } else if (schemaNode instanceof ChoiceSchemaNode) {
+ choiceToGeneratedType(module, basePackageName, typeBuilder, (ChoiceSchemaNode) schemaNode);
} else if (schemaNode instanceof ListSchemaNode) {
listToGenType(module, basePackageName, typeBuilder, typeBuilder, (ListSchemaNode) schemaNode);
}
@@ -1874,7 +1868,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
checkArgument(typeBuilder != null, "Generated Type Builder cannot be NULL.");
if (genTOBuilder != null) {
- GeneratedTransferObject genTO = genTOBuilder.toInstance();
+ final GeneratedTransferObject genTO = genTOBuilder.toInstance();
constructGetter(typeBuilder, "key", "Returns Primary Key of Yang List Type", genTO);
genCtx.get(module).addGeneratedTOBuilder(genTOBuilder);
}
@@ -1893,9 +1887,9 @@ public class BindingGeneratorImpl implements BindingGenerator {
private List listKeys(final ListSchemaNode list) {
final List listKeys = new ArrayList<>();
- List keyDefinition = list.getKeyDefinition();
+ final List keyDefinition = list.getKeyDefinition();
if (keyDefinition != null) {
- for (QName keyDef : keyDefinition) {
+ for (final QName keyDef : keyDefinition) {
listKeys.add(keyDef.getLocalName());
}
}
@@ -1962,12 +1956,12 @@ public class BindingGeneratorImpl implements BindingGenerator {
throw new IllegalStateException("No GeneratedTOBuilder objects generated from union " + typeDef);
}
resultTOBuilder = types.remove(0);
- for (GeneratedTOBuilder genTOBuilder : types) {
+ for (final GeneratedTOBuilder genTOBuilder : types) {
resultTOBuilder.addEnclosingTransferObject(genTOBuilder);
}
final GeneratedPropertyBuilder genPropBuilder = resultTOBuilder.addProperty("value");
- genPropBuilder.setReturnType(Types.primitiveType("char[]", null));
+ genPropBuilder.setReturnType(Types.CHAR_ARRAY);
resultTOBuilder.addEqualsIdentity(genPropBuilder);
resultTOBuilder.addHashIdentity(genPropBuilder);
resultTOBuilder.addToStringProperty(genPropBuilder);
@@ -1977,7 +1971,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
packageName, typeDef, classNameFromLeaf, parentModule.getName()));
}
if (genTOBuilders != null && !genTOBuilders.isEmpty()) {
- for (GeneratedTOBuilder genTOBuilder : genTOBuilders) {
+ for (final GeneratedTOBuilder genTOBuilder : genTOBuilders) {
typeBuilder.addEnclosingTransferObject(genTOBuilder);
}
return genTOBuilders.get(0);
@@ -2004,7 +1998,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
*/
private GeneratedTypeBuilder addImplementedInterfaceFromUses(final DataNodeContainer dataNodeContainer,
final GeneratedTypeBuilder builder) {
- for (UsesNode usesNode : dataNodeContainer.getUses()) {
+ for (final UsesNode usesNode : dataNodeContainer.getUses()) {
if (usesNode.getGroupingPath() != null) {
final GeneratedType genType = findGroupingByPath(usesNode.getGroupingPath()).toInstance();
if (genType == null) {
@@ -2042,7 +2036,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
}
sb.append(NEW_LINE);
- sb.append("
(Source path: ");
+ sb.append("
(Source path: ");
sb.append(moduleSourcePath);
sb.append("):");
sb.append(NEW_LINE);
@@ -2070,18 +2064,12 @@ public class BindingGeneratorImpl implements BindingGenerator {
if (verboseClassComments) {
final Module module = findParentModule(schemaContext, schemaNode);
final StringBuilder linkToBuilderClass = new StringBuilder();
- final StringBuilder linkToKeyClass = new StringBuilder();
final String[] namespace = Iterables.toArray(BSDOT_SPLITTER.split(fullyQualifiedName), String.class);
- String className = namespace[namespace.length - 1];
+ final String className = namespace[namespace.length - 1];
if (hasBuilderClass(schemaNode)) {
linkToBuilderClass.append(className);
linkToBuilderClass.append("Builder");
-
- if (schemaNode instanceof ListSchemaNode) {
- linkToKeyClass.append(className);
- linkToKeyClass.append("Key");
- }
}
sb.append("");
@@ -2089,7 +2077,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
sb.append(module.getName());
sb.append("");
sb.append(NEW_LINE);
- sb.append("
(Source path: ");
+ sb.append("
(Source path: ");
sb.append(module.getModuleSourcePath());
sb.append("):");
sb.append(NEW_LINE);
@@ -2111,11 +2099,16 @@ public class BindingGeneratorImpl implements BindingGenerator {
sb.append(NEW_LINE);
sb.append("@see ");
sb.append(linkToBuilderClass);
+ sb.append(NEW_LINE);
if (schemaNode instanceof ListSchemaNode) {
- sb.append("@see ");
- sb.append(linkToKeyClass);
+ final List keyDef = ((ListSchemaNode)schemaNode).getKeyDefinition();
+ if (keyDef != null && !keyDef.isEmpty()) {
+ sb.append("@see ");
+ sb.append(className);
+ sb.append("Key");
+ }
+ sb.append(NEW_LINE);
}
- sb.append(NEW_LINE);
}
}
@@ -2149,7 +2142,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
sb.append(module.getName());
sb.append("");
sb.append(NEW_LINE);
- sb.append("
Source path: ");
+ sb.append("
Source path: ");
sb.append(module.getModuleSourcePath());
sb.append("):");
sb.append(NEW_LINE);
@@ -2163,8 +2156,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
private GeneratedTypeBuilder findChildNodeByPath(final SchemaPath path) {
- for (ModuleContext ctx : genCtx.values()) {
- GeneratedTypeBuilder result = ctx.getChildNode(path);
+ for (final ModuleContext ctx : genCtx.values()) {
+ final GeneratedTypeBuilder result = ctx.getChildNode(path);
if (result != null) {
return result;
}
@@ -2173,8 +2166,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
private GeneratedTypeBuilder findGroupingByPath(final SchemaPath path) {
- for (ModuleContext ctx : genCtx.values()) {
- GeneratedTypeBuilder result = ctx.getGrouping(path);
+ for (final ModuleContext ctx : genCtx.values()) {
+ final GeneratedTypeBuilder result = ctx.getGrouping(path);
if (result != null) {
return result;
}
@@ -2183,8 +2176,8 @@ public class BindingGeneratorImpl implements BindingGenerator {
}
private GeneratedTypeBuilder findCaseByPath(final SchemaPath path) {
- for (ModuleContext ctx : genCtx.values()) {
- GeneratedTypeBuilder result = ctx.getCase(path);
+ for (final ModuleContext ctx : genCtx.values()) {
+ final GeneratedTypeBuilder result = ctx.getCase(path);
if (result != null) {
return result;
}