boolean next()

in sdk/core/azure-core-http/src/main/java/com/azure/android/core/http/util/UrlTokenizer.java [63:163]


    boolean next() {
        if (!hasCurrentCharacter()) {
            currentToken = null;
        } else {
            switch (state) {
                case SCHEME:
                    final String scheme = readUntilNotLetterOrDigit();
                    currentToken = UrlToken.scheme(scheme);
                    if (!hasCurrentCharacter()) {
                        state = UrlTokenizerState.DONE;
                    } else {
                        state = UrlTokenizerState.HOST;
                    }
                    break;

                case SCHEME_OR_HOST:
                    final String schemeOrHost = readUntilCharacter(':', '/', '?');
                    if (!hasCurrentCharacter()) {
                        currentToken = UrlToken.host(schemeOrHost);
                        state = UrlTokenizerState.DONE;
                    } else if (currentCharacter() == ':') {
                        if (peekCharacters(3).equals("://")) {
                            currentToken = UrlToken.scheme(schemeOrHost);
                            state = UrlTokenizerState.HOST;
                        } else {
                            currentToken = UrlToken.host(schemeOrHost);
                            state = UrlTokenizerState.PORT;
                        }
                    } else if (currentCharacter() == '/') {
                        currentToken = UrlToken.host(schemeOrHost);
                        state = UrlTokenizerState.PATH;
                    } else if (currentCharacter() == '?') {
                        currentToken = UrlToken.host(schemeOrHost);
                        state = UrlTokenizerState.QUERY;
                    }
                    break;

                case HOST:
                    if (peekCharacters(3).equals("://")) {
                        nextCharacter(3);
                    }

                    final String host = readUntilCharacter(':', '/', '?');
                    currentToken = UrlToken.host(host);

                    if (!hasCurrentCharacter()) {
                        state = UrlTokenizerState.DONE;
                    } else if (currentCharacter() == ':') {
                        state = UrlTokenizerState.PORT;
                    } else if (currentCharacter() == '/') {
                        state = UrlTokenizerState.PATH;
                    } else {
                        state = UrlTokenizerState.QUERY;
                    }
                    break;

                case PORT:
                    if (currentCharacter() == ':') {
                        nextCharacter();
                    }

                    final String port = readUntilCharacter('/', '?');
                    currentToken = UrlToken.port(port);

                    if (!hasCurrentCharacter()) {
                        state = UrlTokenizerState.DONE;
                    } else if (currentCharacter() == '/') {
                        state = UrlTokenizerState.PATH;
                    } else {
                        state = UrlTokenizerState.QUERY;
                    }
                    break;

                case PATH:
                    final String path = readUntilCharacter('?');
                    currentToken = UrlToken.path(path);

                    if (!hasCurrentCharacter()) {
                        state = UrlTokenizerState.DONE;
                    } else {
                        state = UrlTokenizerState.QUERY;
                    }
                    break;

                case QUERY:
                    if (currentCharacter() == '?') {
                        nextCharacter();
                    }

                    final String query = readRemaining();
                    currentToken = UrlToken.query(query);
                    state = UrlTokenizerState.DONE;
                    break;

                default:
                    break;
            }
        }

        return currentToken != null;
    }