org_eclipse_lemminx_extensions_xsd_XSDDocumentLinkingExtensionsTest_java
org.eclipse.lemminx.extensions.xsd.participants.XSDDocumentLinkParticipant
@Override
    public void findDocumentLinks(DOMDocument document, List<DocumentLink> links) {
        DOMElement root = document.getDocumentElement();
        if (!XSDUtils.isXSSchema(root)) {
            return;
        }
        String xmlSchemaPrefix = root.getPrefix();
        List<DOMNode> children = root.getChildren();
        for (DOMNode child : children) {
            DOMAttr schemaLocationAttr;
            DOMElement xsdElement;
            if (!child.isElement() || !Objects.equals(child.getPrefix(), xmlSchemaPrefix) || !XSDUtils.isXSInclude(xsdElement = (DOMElement)child) && !XSDUtils.isXSImport(xsdElement) || (schemaLocationAttr = XSDUtils.getSchemaLocation(xsdElement)) == null || StringUtils.isEmpty(schemaLocationAttr.getValue())) continue;
            String location = XSDDocumentLinkParticipant.getResolvedLocation(document.getDocumentURI(), schemaLocationAttr.getValue());
            DOMNode schemaLocationRange = schemaLocationAttr.getNodeAttrValue();
            try {
                links.add(XMLPositionUtility.createDocumentLink(schemaLocationRange, location, true));
            }
            catch (BadLocationException e) {
                LOGGER.log(Level.SEVERE, "Creation of document link failed", e);
            }
        }
    }
 -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.Objects.equals(java.lang.Object,java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.isEmpty(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.Objects.equals(java.lang.Object,java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String [EXIT] [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String [EXIT] -> java.util.Objects.equals(java.lang.Object,java.lang.Object): boolean [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [CALL] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.isEmpty(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int,int): java.lang.String [EXIT] -> java.util.Objects.equals(java.lang.Object,java.lang.Object): boolean [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.substring(int): java.lang.String [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT]