- returnType = typeProvider.javaTypeForSchemaDefinitionType(getBaseOrDeclaredType(typeDef), leaf,
- restrictions, inGrouping);
+ final TypeDefinition<?> baseOrDeclaredType = getBaseOrDeclaredType(typeDef);
+ // we need to try to lookup an already generated type in case the leafref is targetting a generated type
+ if (baseOrDeclaredType instanceof LeafrefTypeDefinition) {
+ final SchemaNode leafrefTarget =
+ typeProvider.getTargetForLeafref((LeafrefTypeDefinition) baseOrDeclaredType, leaf);
+ if (leafrefTarget instanceof TypedDataSchemaNode) {
+ returnType = context.getInnerType(((TypedDataSchemaNode) leafrefTarget).getType().getPath());
+ }
+ }
+ if (returnType == null) {
+ returnType = typeProvider.javaTypeForSchemaDefinitionType(baseOrDeclaredType, leaf,
+ restrictions, inGrouping);
+ }
+