| 844 | } |
| 845 | |
| 846 | void ObjectIdentifier::resolve(ResolveResults& results) const |
| 847 | { |
| 848 | if (!owner) { |
| 849 | return; |
| 850 | } |
| 851 | |
| 852 | bool docAmbiguous = false; |
| 853 | |
| 854 | /* Document name specified? */ |
| 855 | if (!documentName.getString().empty()) { |
| 856 | results.resolvedDocument = getDocument(documentName, &docAmbiguous); |
| 857 | results.resolvedDocumentName = documentName; |
| 858 | } |
| 859 | else { |
| 860 | results.resolvedDocument = owner->getDocument(); |
| 861 | results.resolvedDocumentName = String(results.resolvedDocument->getName(), false, true); |
| 862 | } |
| 863 | |
| 864 | results.subObjectName = subObjectName; |
| 865 | results.propertyName = ""; |
| 866 | results.propertyIndex = 0; |
| 867 | |
| 868 | // Assume document name and object name from owner if not found |
| 869 | if (!results.resolvedDocument) { |
| 870 | if (!documentName.getString().empty()) { |
| 871 | if (docAmbiguous) { |
| 872 | results.flags.set(ResolveAmbiguous); |
| 873 | } |
| 874 | return; |
| 875 | } |
| 876 | |
| 877 | results.resolvedDocument = owner->getDocument(); |
| 878 | if (!results.resolvedDocument) { |
| 879 | return; |
| 880 | } |
| 881 | } |
| 882 | |
| 883 | results.resolvedDocumentName = String(results.resolvedDocument->getName(), false, true); |
| 884 | |
| 885 | /* Document object name specified? */ |
| 886 | if (!documentObjectName.getString().empty()) { |
| 887 | results.resolvedDocumentObjectName = documentObjectName; |
| 888 | results.resolvedDocumentObject = |
| 889 | getDocumentObject(results.resolvedDocument, documentObjectName, results.flags); |
| 890 | if (!results.resolvedDocumentObject) { |
| 891 | return; |
| 892 | } |
| 893 | |
| 894 | if (components.empty()) { |
| 895 | return; |
| 896 | } |
| 897 | |
| 898 | results.propertyName = components[0].name.getString(); |
| 899 | results.propertyIndex = 0; |
| 900 | results.getProperty(*this); |
| 901 | } |
| 902 | else { |
| 903 | /* Document object name not specified, resolve from path */ |
no test coverage detected