Binding generator v2 - fix choice
[mdsal.git] / binding2 / mdsal-binding2-generator-impl / src / main / java / org / opendaylight / mdsal / binding / javav2 / generator / impl / GenHelperUtil.java
index 585e1592b1ef906c1121388206cf6f024b573ff6..e08d7011bbb415f32e1b9fa4f8c1c8915415396c 100644 (file)
@@ -680,7 +680,7 @@ final class GenHelperUtil {
                 listToGenType(module, basePackageName, typeBuilder, childOf, (ListSchemaNode) node, schemaContext,
                         verboseClassComments, genCtx, genTypeBuilders, typeProvider, namespaceType);
             } else if (node instanceof ChoiceSchemaNode) {
-                choiceToGenType(module, schemaContext, verboseClassComments, basePackageName, childOf,
+                choiceToGenType(module, schemaContext, verboseClassComments, basePackageName, typeBuilder,
                         (ChoiceSchemaNode) node, genTypeBuilders, genCtx, typeProvider, namespaceType);
             } else if (node instanceof AnyXmlSchemaNode || node instanceof AnyDataSchemaNode) {
                 resolveAnyNodeAsMethod(schemaContext, typeBuilder, genCtx, node, module, typeProvider);
@@ -782,6 +782,7 @@ final class GenHelperUtil {
                     typeBuildersToGenTypes(module, genType, genTypeBuilder.toInstance(), genCtx, namespaceType);
                     genCtx.get(module).addKeyType(node.getPath(), genTypeBuilder);
                 }
+                processUsesImplements(node, module, schemaContext, genCtx, namespaceType);
             } else {
                 final GeneratedTOBuilder genTOBuilder = resolveListKeyTOBuilder(packageName, node, genCtx.get(module));
                 for (final DataSchemaNode schemaNode : node.getChildNodes()) {
@@ -858,21 +859,20 @@ final class GenHelperUtil {
 
         if (leaf.isAddedByUses()) {
             Preconditions.checkState(leaf instanceof DerivableSchemaNode);
-            LeafSchemaNode originalLeaf = (LeafSchemaNode)((DerivableSchemaNode) leaf).getOriginal().orNull();
-            Preconditions.checkNotNull(originalLeaf);
-            if (isInnerType(originalLeaf, typeDef)) {
-                if (typeDef instanceof EnumTypeDefinition
-                        || typeDef instanceof UnionTypeDefinition
-                        || typeDef instanceof BitsTypeDefinition) {
+            if (isInnerType(leaf, typeDef)) {
+                final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef);
+                returnType = typeProvider.javaTypeForSchemaDefinitionType(getBaseOrDeclaredType(typeDef), leaf,
+                        restrictions, genCtx.get(module));
+            } else {
+                if (typeDef.getBaseType() == null && (typeDef instanceof EnumTypeDefinition
+                        || typeDef instanceof UnionTypeDefinition || typeDef instanceof BitsTypeDefinition)) {
+                    LeafSchemaNode originalLeaf = (LeafSchemaNode) ((DerivableSchemaNode) leaf).getOriginal().orNull();
+                    Preconditions.checkNotNull(originalLeaf);
                     returnType = genCtx.get(findParentModule(schemaContext, originalLeaf)).getInnerType(typeDef.getPath());
                 } else {
                     final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef);
-                    returnType = typeProvider.javaTypeForSchemaDefinitionType(getBaseOrDeclaredType(typeDef), leaf,
-                            restrictions, genCtx.get(module));
+                    returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, restrictions, genCtx.get(module));
                 }
-            } else {
-                final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef);
-                returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, restrictions, genCtx.get(module));
             }
         } else if (isInnerType(leaf, typeDef)) {
             if (typeDef instanceof EnumTypeDefinition) {
@@ -911,7 +911,6 @@ final class GenHelperUtil {
             returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, restrictions, genCtx.get(module));
         }
 
-
         if (returnType == null) {
             return null;
         }