org_eclipse_lemminx_extensions_general_FilePathCompletionTest_java
org.eclipse.lemminx.services.XMLCompletions
private void collectDTDSystemIdSuggestions(int valueStart, int valueEnd, CompletionRequest completionRequest, CompletionResponse completionResponse, CancelChecker cancelChecker) {
        int offset = completionRequest.getOffset();
        String text = completionRequest.getXMLDocument().getText();
        int valueContentStart = valueStart + 1;
        int valueContentEnd = valueEnd - 1;
        String valuePrefix = offset >= valueContentStart && offset <= valueContentEnd ? text.substring(valueContentStart, offset) : "";
        Collection<ICompletionParticipant> completionParticipants = this.getCompletionParticipants();
        if (completionParticipants.size() > 0) {
            try {
                Range replaceRange = XMLCompletions.getReplaceRange(valueContentStart, valueContentEnd, completionRequest);
                completionRequest.setReplaceRange(replaceRange);
                for (ICompletionParticipant participant : completionParticipants) {
                    try {
                        participant.onDTDSystemId(valuePrefix, completionRequest, completionResponse, cancelChecker);
                    }
                    catch (CancellationException e) {
                        throw e;
                    }
                    catch (Exception e) {
                        LOGGER.log(Level.SEVERE, "While performing ICompletionParticipant#onDTDSystemId for participant '" + participant.getClass().getName() + "'.", e);
                    }
                }
            }
            catch (BadLocationException e) {
                LOGGER.log(Level.SEVERE, "While performing Completions, getReplaceRange() was given a bad Offset location", e);
            }
            catch (CancellationException e) {
                throw e;
            }
            catch (Exception e) {
                LOGGER.log(Level.SEVERE, "While performing ICompletionParticipant#onDTDSystemId", e);
            }
        }
    }
 -> java.lang.String.substring(int,int): java.lang.String -> java.util.Collection.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.Collection.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.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.isEmpty(): boolean -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.substring(int,int): java.lang.String -> java.lang.String.contains(java.lang.CharSequence): boolean -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.nio.charset.Charset.name(): java.lang.String -> java.net.URLDecoder.decode(java.lang.String,java.lang.String): java.lang.String -> java.nio.file.Paths.get(java.lang.String,java.lang.String[]): java.nio.file.Path -> java.nio.file.Path.isAbsolute(): boolean -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String -> java.nio.charset.Charset.name(): java.lang.String -> java.net.URLDecoder.decode(java.lang.String,java.lang.String): java.lang.String -> java.nio.file.Paths.get(java.lang.String,java.lang.String[]): java.nio.file.Path -> java.nio.file.Path.getParent(): java.nio.file.Path -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.normalize(): java.nio.file.Path -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.endsWith(java.lang.String): boolean -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.lastIndexOf(java.lang.String): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.nio.file.Files.newDirectoryStream(java.nio.file.Path): java.nio.file.DirectoryStream -> java.nio.file.DirectoryStream.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.getName(): java.lang.String -> java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.toFile(): java.io.File -> java.io.File.getName(): java.lang.String -> java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.io.File.isDirectory(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.nio.file.DirectoryStream.close(): void -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.Collection.size(): int [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] -> java.util.Collection.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.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] -> java.lang.String.isEmpty(): boolean [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean -> java.lang.String.charAt(int): char -> java.lang.Character.isWhitespace(char): boolean [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.lang.String.contains(java.lang.CharSequence): boolean [EXIT] -> java.lang.String.startsWith(java.lang.String): boolean -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.lang.String.indexOf(java.lang.String): int [EXIT] -> java.nio.charset.Charset.name(): java.lang.String -> java.net.URLDecoder.decode(java.lang.String,java.lang.String): java.lang.String -> java.nio.file.Paths.get(java.lang.String,java.lang.String[]): java.nio.file.Path [EXIT] -> java.nio.file.Path.isAbsolute(): boolean [CALL] [CALL] -> java.lang.String.indexOf(java.lang.String): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.substring(int,int): java.lang.String [EXIT] -> java.nio.charset.Charset.name(): java.lang.String -> java.net.URLDecoder.decode(java.lang.String,java.lang.String): java.lang.String -> java.nio.file.Paths.get(java.lang.String,java.lang.String[]): java.nio.file.Path [EXIT] -> java.nio.file.Path.getParent(): java.nio.file.Path -> java.nio.file.Path.resolve(java.nio.file.Path): java.nio.file.Path -> java.nio.file.Path.normalize(): java.nio.file.Path -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.endsWith(java.lang.String): boolean -> java.nio.file.Files.exists(java.nio.file.Path,java.nio.file.LinkOption[]): boolean [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] -> java.lang.String.lastIndexOf(java.lang.String): int [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.nio.file.Files.newDirectoryStream(java.nio.file.Path): java.nio.file.DirectoryStream -> java.nio.file.DirectoryStream.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.toFile(): java.io.File [CALL] -> java.io.File.getName(): java.lang.String [CALL] -> java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String [CALL] [CALL] [EXIT] [EXIT] -> java.io.File.isDirectory(): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] -> java.util.List.add(java.lang.Object): boolean [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.nio.file.Path.toFile(): java.io.File [CALL] -> java.io.File.getName(): java.lang.String [CALL] -> java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String [CALL] [CALL] [EXIT] [EXIT] -> java.io.File.isDirectory(): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] -> java.util.List.add(java.lang.Object): boolean [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.nio.file.DirectoryStream.close(): void [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean [EXIT]