+ /**
+ * Resolve target type from leafref type.
+ *
+ * According to RFC 6020 referenced element has to be leaf (chapter 9.9).
+ * Therefore if other element is referenced then null value is returned.
+ *
+ * Currently only cases without path-predicate are supported.
+ *
+ * @param leafRef
+ * @param schemaNode
+ * data schema node which contains reference
+ * @return type if leaf is referenced and it is possible to find referenced
+ * node in schema context. In other cases null value is returned
+ */
+ def LeafSchemaNode resolveTypeFromLeafref(LeafrefTypeDefinition leafRef, DataSchemaNode schemaNode) {
+ val xPath = leafRef.getPathStatement();
+ val module = SchemaContextUtil.findParentModule(schemas, schemaNode);
+
+ var SchemaNode foundSchemaNode
+ if (xPath.isAbsolute()) {
+ foundSchemaNode = SchemaContextUtil.findDataSchemaNode(schemas, module, xPath);
+ } else {
+ foundSchemaNode = SchemaContextUtil.findDataSchemaNodeForRelativeXPath(schemas, module, schemaNode, xPath);
+ }
+
+ if (foundSchemaNode instanceof LeafSchemaNode) {
+ return foundSchemaNode as LeafSchemaNode;
+ }
+
+ return null;
+ }