org_eclipse_lemminx_extensions_xsd_XSDCompletionExtensionsTest_java
org.eclipse.lemminx.extensions.contentmodel.model.ContentModelManager
private CMDocument findCMDocument(String uri, String publicId, String systemId, ContentModelProvider modelProvider) {
        resolvedUri = this.resolverManager.resolve(uri, publicId, systemId);
        if (resolvedUri == null) {
            return null;
        }
        if (modelProvider == null) {
            modelProvider = this.getModelProviderByURI(resolvedUri);
        }
        if (modelProvider == null) {
            return null;
        }
        cmDocument = this.getCMDocumentFromCache(resolvedUri);
        if (cmDocument != null) {
            return cmDocument;
        }
        if (this.cacheResolverExtension.canUseCache(resolvedUri)) {
            try {
                file = this.cacheResolverExtension.getCachedResource(resolvedUri);
                if (file == null) ** GOTO lbl23
                cmDocument = modelProvider.createCMDocument(file.toUri().toString());
            }
            catch (CacheResourceDownloadingException e) {
                return null;
            }
            catch (Exception e) {
                cmDocument = modelProvider.createCMDocument(resolvedUri);
            }
        } else {
            cmDocument = modelProvider.createCMDocument(resolvedUri);
        }
lbl23:
        // 4 sources

        if (cmDocument != null) {
            this.cache(resolvedUri, cmDocument);
        }
        return cmDocument;
    }
 -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.get(int): java.lang.Object -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.toURI(): java.net.URI -> java.net.URI.toString(): java.lang.String -> java.lang.String.isEmpty(): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.endsWith(java.lang.String): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean -> java.nio.file.Files.getLastModifiedTime(java.nio.file.Path,java.nio.file.LinkOption[]): java.nio.file.attribute.FileTime -> java.nio.file.attribute.FileTime.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean -> java.nio.file.Files.getLastModifiedTime(java.nio.file.Path,java.nio.file.LinkOption[]): java.nio.file.attribute.FileTime -> java.nio.file.attribute.FileTime.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path [EXIT] [EXIT] -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path [EXIT] [EXIT] -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path [EXIT] [EXIT] -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.exists(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [CALL] [EXIT] -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path [EXIT] [EXIT] -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.toURI(): java.net.URI -> java.net.URI.toString(): java.lang.String [EXIT] -> java.lang.String.isEmpty(): boolean [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.lang.String.endsWith(java.lang.String): boolean [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean -> java.nio.file.Files.getLastModifiedTime(java.nio.file.Path,java.nio.file.LinkOption[]): java.nio.file.attribute.FileTime -> java.nio.file.attribute.FileTime.equals(java.lang.Object): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean -> java.nio.file.Files.getLastModifiedTime(java.nio.file.Path,java.nio.file.LinkOption[]): java.nio.file.attribute.FileTime -> java.nio.file.attribute.FileTime.equals(java.lang.Object): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [EXIT] [EXIT]