@NotNull
private PrismReference parseReference(@NotNull XNodeImpl node, @NotNull QName itemName,
@NotNull PrismReferenceDefinition definition, @NotNull ParsingContext pc) throws SchemaException {
PrismReference ref = definition.instantiate();
if (node instanceof ListXNodeImpl) {
ListXNodeImpl listNode = (ListXNodeImpl) node;
if (!definition.isMultiValue() && listNode.size() > 1) {
throw new SchemaException("Attempt to store multiple values in single-valued reference " + itemName);
}
for (XNodeImpl subNode : listNode) {
ref.add(parseReferenceValueFromXNode(subNode, definition, itemName, pc));
}
} else if (node instanceof MapXNodeImpl) {
ref.add(parseReferenceValueFromXNode(node, definition, itemName, pc));
} else if (node instanceof PrimitiveXNodeImpl) {
} else {
throw new IllegalArgumentException("Cannot parse reference from " + node);
}
return ref;
}