All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.runner.core.ParseParams Maven / Gradle / Ivy

package com.moon.runner.core;

import com.moon.core.lang.ref.IntAccessor;
import com.moon.runner.RunnerSetting;

import java.util.ArrayList;
import java.util.List;

import static com.moon.core.lang.ThrowUtil.noInstanceError;
import static com.moon.runner.core.Constants.*;

/**
 * 方法调用参数解析
 *
 * @author moonsky
 */
final class ParseParams {
    private ParseParams() { noInstanceError(); }

    /**
     * 从左括号的下一个字符开始解析,右括号为止
     * 两个连续逗号之间默认有一个 null 值,
     * 最后一个逗号后如果是右圆括号,则忽略
     *
     * @param chars
     * @param indexer
     * @param len
     * @param settings
     * @return
     */
    final static AsRunner[] parse(char[] chars, IntAccessor indexer, int len, RunnerSetting settings) {
        int curr = ParseUtil.nextVal(chars, indexer, len);
        List params = new ArrayList();
        AsRunner runner;
        outer:
        for (int next = curr; ; curr = next) {
            switch (next) {
                case YUAN_R:
                    AsValuer[] runners = new AsValuer[params.size()];
                    return (AsValuer[]) params.toArray(runners);
                case SINGLE:
                case DOUBLE:
                    runner = ParseConst.parseStr(chars, indexer, next);
                    break;
                default:
                    runner = ParseCore.parse(chars, indexer.decrement(), len, settings, COMMA, YUAN_R);
                    if ((next = chars[indexer.get() - 1]) == YUAN_R) {
                        params.add(runner);
                        continue outer;
                    }
                    break;
            }
            params.add(runner);
            next = ParseUtil.nextVal(chars, indexer, len);
            if (next == COMMA && (runner != DataConst.NULL || (curr != COMMA && curr != YUAN_L))) {
                next = ParseUtil.nextVal(chars, indexer, len);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy