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) {
returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, restrictions, genCtx.get(module));
}
-
if (returnType == null) {
return null;
}
import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.javav2.model.api.MethodSignature;
import org.opendaylight.mdsal.binding.javav2.model.api.Type;
-import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
}
}
+ @Test
+ public void generatedTypesUsesLeafInnertype3Test() throws Exception {
+ final BindingGenerator bg = new BindingGeneratorImpl(false);
+ final List<String> sources = new ArrayList<>();
+ sources.add("/uses-statement/test-uses-leaf-innertype3-base.yang");
+ sources.add("/uses-statement/test-uses-leaf-innertype3.yang");
+ final SchemaContext context = YangParserTestUtils.parseYangSources(sources);
+ final List<Type> generateTypes = bg.generateTypes(context);
+ assertNotNull(generateTypes);
+ assertTrue(!generateTypes.isEmpty());
+ for (final Type type : generateTypes) {
+ if (type.getName().equals("MyCont") && type.getPackageName()
+ .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
+ final GeneratedType gt = (GeneratedType) type;
+ for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
+ if (methodSignature.getName().equals("getBandwidth")) {
+ assertEquals("Bandwidth", methodSignature.getReturnType().getName());
+ }
+ }
+
+ }
+
+ if (type.getName().equals("Open") && type.getPackageName()
+ .equals("org.opendaylight.mdsal.gen.javav2.urn.test.uses.leaf.innertype3.rev170809.data")) {
+ final GeneratedType gt = (GeneratedType) type;
+ for (MethodSignature methodSignature : gt.getMethodDefinitions()) {
+ if (methodSignature.getName().equals("getVersion")) {
+ assertEquals("ProtocolVersion", methodSignature.getReturnType().getName());
+ }
+
+ if (methodSignature.getName().equals("getLeafUnion")) {
+ assertEquals("LeafUnion", methodSignature.getReturnType().getName());
+ }
+ }
+
+ }
+ }
+ }
+
@Test
public void generatedTypesTest() throws Exception {
final BindingGenerator bg = new BindingGeneratorImpl(false);
--- /dev/null
+module test-uses-leaf-innertype3-base{
+ namespace "urn:test:uses:leaf:innertype3:base";
+ prefix base;
+ revision 2017-08-09;
+
+ typedef float32 {
+ type binary {
+ length 4;
+ }
+ }
+
+ typedef bandwidth {
+ type float32;
+ }
+}
\ No newline at end of file
--- /dev/null
+module test-uses-leaf-innertype3{
+ namespace "urn:test:uses:leaf:innertype3";
+ prefix innertype3;
+ revision 2017-08-09;
+ import test-uses-leaf-innertype3-base {
+ prefix base;
+ }
+
+ typedef protocol-version {
+ type uint8 {
+ range 1..7;
+ }
+ }
+
+ grouping open-message {
+ leaf version {
+ type protocol-version;
+ default 4;
+ }
+
+ leaf leaf-union {
+ type union {
+ type string;
+ type int64;
+ }
+ }
+ }
+
+ grouping link-bandwidth-extended-community {
+ leaf bandwidth {
+ mandatory true;
+ type base:bandwidth;
+ units "bytes per second";
+ }
+ }
+
+ container my-cont {
+ uses link-bandwidth-extended-community;
+ }
+
+ notification open {
+ uses open-message;
+ }
+
+}
\ No newline at end of file