Bug 6135: Java binding v1: IAE from provideTypeForLeafref
[mdsal.git] / binding / mdsal-binding-generator-impl / src / main / java / org / opendaylight / yangtools / sal / binding / generator / impl / BindingGeneratorImpl.java
index 9e99a2ac40fdd3a5db54eefa50897b3eeb4c1941..36d603c32c6e689ab1a5ea8a2db9ef6f9be65e21 100644 (file)
@@ -27,6 +27,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.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
@@ -1414,18 +1415,14 @@ public class BindingGeneratorImpl implements BindingGenerator {
         Type returnType = null;
 
         final TypeDefinition<?> typeDef = CompatUtils.compatLeafType(leaf);
-        if (isInnerType(leaf, typeDef)) {
-            if (typeDef instanceof EnumTypeDefinition) {
-                returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
-                final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef;
-                final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, leaf.getQName(),
-                    typeBuilder, module);
-
-                if (enumBuilder != null) {
-                    returnType = enumBuilder.toInstance(typeBuilder);
-                }
-                ((TypeProviderImpl) typeProvider).putReferencedType(leaf.getPath(), returnType);
-            } else if (typeDef instanceof UnionTypeDefinition) {
+        if (typeDef instanceof EnumTypeDefinition) {
+            final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef;
+            final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, leaf.getQName(), typeBuilder, module);
+            returnType = enumBuilder != null ? enumBuilder.toInstance(typeBuilder) :
+                    typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf);
+            ((TypeProviderImpl) typeProvider).putReferencedType(leaf.getPath(), returnType);
+        } else if (isInnerType(leaf, typeDef)) {
+            if (typeDef instanceof UnionTypeDefinition) {
                 GeneratedTOBuilder genTOBuilder = addTOToTypeBuilder(typeDef, typeBuilder, leaf, parentModule);
                 if (genTOBuilder != null) {
                     returnType = createReturnTypeForUnion(genTOBuilder, typeDef, typeBuilder, parentModule);