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;
final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) typeDef;
final EnumBuilder enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, leaf.getQName(),
typeBuilder, module);
-
if (enumBuilder != null) {
returnType = enumBuilder.toInstance(typeBuilder);
}
return null;
}
+ if (typeDef instanceof EnumTypeDefinition) {
+ ((TypeProviderImpl) typeProvider).putReferencedType(leaf.getPath(), returnType);
+ }
+
String leafDesc = leaf.getDescription();
if (leafDesc == null) {
leafDesc = "";
--- /dev/null
+/*
+ * Copyright (c) 2016 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.sal.binding.generator.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
+import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
+import org.opendaylight.yangtools.sal.binding.model.api.Type;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
+
+public class Bug6135Test {
+
+ @Ignore
+ @Test
+ public void bug6135Test() throws ReactorException {
+ final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
+ reactor.addSource(new YangStatementSourceImpl("/bug-6135/foo.yang", false));
+
+ final EffectiveSchemaContext context = reactor.buildEffective();
+ assertNotNull(context);
+
+ final List<Type> generateTypes = new BindingGeneratorImpl(false).generateTypes(context);
+ assertFalse(generateTypes.isEmpty());
+
+ GeneratedType genInterface = null;
+ for (final Type type : generateTypes) {
+ if (type.getName().equals("TestLeafrefData")) {
+ genInterface = (GeneratedType) type;
+ break;
+ }
+ }
+ assertNotNull(genInterface);
+ final List<Enumeration> enums = genInterface.getEnumerations();
+ assertEquals(2, enums.size());
+ }
+}
\ No newline at end of file
--- /dev/null
+module test-leafref {
+
+ namespace "odl:test:leafref";
+ prefix "tl";
+ revision 2015-04-09;
+
+ typedef my-enum {
+ type enumeration {
+ enum one {
+ value 1;
+ }
+ }
+ }
+
+ leaf my-inner-leaf {
+ type my-enum;
+ }
+
+ leaf my-leafref-inner {
+ type leafref {
+ path "/tl:my-inner-leaf";
+ }
+ }
+
+ leaf my-leaf {
+ type enumeration {
+ enum one {
+ value 1;
+ }
+ }
+ }
+
+ leaf my-leafref {
+ type leafref {
+ path "/tl:my-leaf";
+ }
+ }
+
+ leaf-list list-of-enums-inner {
+ type enumeration {
+ enum x;
+ enum y;
+ enum z;
+ }
+ }
+
+ leaf-list enums {
+ type leafref {
+ path "/tl:list-of-enums";
+ }
+ }
+
+ leaf-list list-of-enums {
+ type leafref {
+ path "/tl:my-leaf";
+ }
+ }
+
+ grouping my-group {
+ container my-cont {
+ leaf my-enum {
+ type my-enum;
+ mandatory true;
+ }
+ }
+ }
+
+ container my-cont2 {
+ uses my-group;
+ }
+
+}
\ No newline at end of file