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=c8db5f1ebc2b76a627df951d8b986b466f8b255c;hb=1fa4f51ce27b8a625d01f622f1261d51c0e852cb;hp=af67e659b3405b72f101a35cf57785398b64e495;hpb=18b7a30395ccafccef4e9de527f8908e7c5824bb;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 af67e659b3..c8db5f1ebc 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; @@ -26,7 +25,7 @@ import static org.opendaylight.yangtools.binding.generator.util.Types.typeForCla import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode; 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; @@ -38,6 +37,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import org.opendaylight.yangtools.sal.binding.generator.impl.YangTemplate; import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil; import org.opendaylight.yangtools.binding.generator.util.BindingTypes; import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl; @@ -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 { * * @throws IllegalArgumentException * */ 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."); @@ -1189,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."); @@ -1199,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); @@ -1208,39 +1219,41 @@ 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()); - - SchemaNode parent; - if (parentNode instanceof AugmentationSchema) { - final AugmentationSchema augSchema = (AugmentationSchema) parentNode; - final SchemaPath targetPath = augSchema.getTargetPath(); - SchemaNode targetSchemaNode = findDataSchemaNode(schemaContext, targetPath); - if (targetSchemaNode instanceof DataSchemaNode - && ((DataSchemaNode) targetSchemaNode).isAddedByUses()) { - if (targetSchemaNode instanceof DerivableSchemaNode) { - targetSchemaNode = ((DerivableSchemaNode) targetSchemaNode).getOriginal().orNull(); - } - if (targetSchemaNode == null) { - throw new IllegalStateException( - "Failed to find target node from grouping for augmentation " + augSchema - + " in module " + module.getName()); + final SchemaPath choiceNodeParentPath = choiceNode.getPath().getParent(); + + if (!Iterables.isEmpty(choiceNodeParentPath.getPathFromRoot())) { + SchemaNode parent = findDataSchemaNode(schemaContext, choiceNodeParentPath); + + if (parent instanceof AugmentationSchema) { + final AugmentationSchema augSchema = (AugmentationSchema) parent; + final SchemaPath targetPath = augSchema.getTargetPath(); + SchemaNode targetSchemaNode = findDataSchemaNode(schemaContext, targetPath); + if (targetSchemaNode instanceof DataSchemaNode + && ((DataSchemaNode) targetSchemaNode).isAddedByUses()) { + if (targetSchemaNode instanceof DerivableSchemaNode) { + targetSchemaNode = ((DerivableSchemaNode) targetSchemaNode).getOriginal().orNull(); + } + if (targetSchemaNode == null) { + throw new IllegalStateException( + "Failed to find target node from grouping for augmentation " + augSchema + + " in module " + module.getName()); + } } + parent = targetSchemaNode; } - parent = targetSchemaNode; - } else { - final SchemaPath sp = choiceNode.getPath(); - parent = findDataSchemaNode(schemaContext, sp.getParent()); - } - GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.getPath()); - if (childOfType == null) { - childOfType = findGroupingByPath(parent.getPath()); - } - resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes); - } - } + Preconditions.checkState(parent != null, "Could not find Choice node parent %s", + choiceNodeParentPath); + GeneratedTypeBuilder childOfType = findChildNodeByPath(parent.getPath()); + if (childOfType == null) { + childOfType = findGroupingByPath(parent.getPath()); + } + resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, childOfType, caseChildNodes); + } else + resolveDataSchemaNodes(module, basePackageName, caseTypeBuilder, moduleToDataType(module), + caseChildNodes); + } + } processUsesAugments(caseNode, module); } } @@ -1273,12 +1286,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); @@ -1329,6 +1342,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 @@ -1336,7 +1351,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(); @@ -1354,7 +1369,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); @@ -1385,7 +1400,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(); @@ -1398,7 +1413,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 " @@ -1426,7 +1441,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; } @@ -1435,7 +1450,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()); } @@ -1451,23 +1466,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; } @@ -1500,7 +1519,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); @@ -1520,6 +1539,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, @@ -1527,7 +1547,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(); @@ -1540,7 +1560,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) { @@ -1578,10 +1598,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"); @@ -1598,6 +1619,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); @@ -1608,10 +1645,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 @@ -1740,7 +1777,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(); } @@ -1808,7 +1845,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); @@ -1818,11 +1855,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); } @@ -1834,7 +1871,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); } @@ -1853,9 +1890,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()); } } @@ -1918,15 +1955,16 @@ public class BindingGeneratorImpl implements BindingGenerator { genTOBuilders.addAll(types); GeneratedTOBuilder resultTOBuilder = null; - if (!types.isEmpty()) { - resultTOBuilder = types.remove(0); - for (GeneratedTOBuilder genTOBuilder : types) { - resultTOBuilder.addEnclosingTransferObject(genTOBuilder); - } + if (types.isEmpty()) { + throw new IllegalStateException("No GeneratedTOBuilder objects generated from union " + typeDef); + } + resultTOBuilder = types.remove(0); + 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); @@ -1936,7 +1974,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); @@ -1963,7 +2001,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) { @@ -2001,7 +2039,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); @@ -2029,18 +2067,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("

"); @@ -2048,7 +2080,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); @@ -2070,11 +2102,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); } } @@ -2108,7 +2145,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); @@ -2122,8 +2159,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; } @@ -2132,8 +2169,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; } @@ -2142,8 +2179,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; }