From 8a16103cbf03faa899a57bf9858620242cb4aa09 Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Wed, 2 Dec 2015 13:41:09 +0100 Subject: [PATCH] Fixed regression of Bug 4699 Added special case to leaf method resolution to use derived type instead of restricted type to lookup for Java Method. Change-Id: Ibba83be142f97485cc0f5139da68788a018c4b48 Signed-off-by: Tony Tkacik --- .../generator/impl/BindingGeneratorImpl.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java index d56db0c1d0..b9824f031e 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java @@ -1408,8 +1408,13 @@ public class BindingGeneratorImpl implements BindingGenerator { returnType = genTOBuilder.toInstance(); } } else { + // It is constrained version of already declared type (inner declared type exists, + // onlyfor special cases (Enum, Union, Bits), which were already checked. + // In order to get proper class we need to look up closest derived type + // and apply restrictions from leaf type final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef); - returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, restrictions); + returnType = typeProvider.javaTypeForSchemaDefinitionType(getBaseOrDeclaredType(typeDef), leaf, + restrictions); } } else { final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(typeDef); @@ -1430,6 +1435,16 @@ public class BindingGeneratorImpl implements BindingGenerator { return returnType; } + private static TypeDefinition getBaseOrDeclaredType(TypeDefinition typeDef) { + if (typeDef instanceof ExtendedType) { + // Legacy behaviour returning ExtendedType is enough + return typeDef; + } + // Returns DerivedType in case of new parser. + final TypeDefinition baseType = typeDef.getBaseType(); + return (baseType != null && baseType.getBaseType() != null) ? baseType : typeDef; + } + private void processContextRefExtension(final LeafSchemaNode leaf, final MethodSignatureBuilder getter, final Module module) { for (final UnknownSchemaNode node : leaf.getUnknownSchemaNodes()) { -- 2.36.6