Janino ExpressionEvaluator не угадывает все параметры?

Рассмотрим простой вариант использования ExpressionEvaluator класс Janino библиотека, т. е. при ее использовании угадать параметры выражения следующим образом:

public static String[] getParameters(String expression) { // Suppress exceptions
    try {
        return ExpressionEvaluator.guessParameterNames(
                new Scanner(null, new StringReader(expression)));
    } catch (Exception e) {
    }

    return null;
}

Хотя вышеприведенное работает очень хорошо (100%) для любого типа выражения, с которым я его использовал (включая некоторые очень непонятные), если любой из параметров начинается с заглавной буквы, он опущен.

Например, выражение

aVar + Another

выдаст только 1 параметр (aVar), если передан вышеупомянутому методу, тогда как другой параметр (Another) игнорируется.

Есть ли какое-либо объяснение этому поведению (например, переменные, начинающиеся с заглавной буквы, предполагается, что имена классов)?

Самое главное, может ли описанное поведение быть обойдено так или иначе (например, с помощью некоторой опции конфигурации)?


ОБНОВИТЬ

Видимо, ограничение носит более общий характер и влияет на все параметры, начиная с заглавной буквы. Это известное ограничение (или функция) Janino, как описано в JANINO-151 и упомянуто в соответствующем обсуждении.

Действительно, исходный код guessParameterNames() метод класса Janino ExpressionEvaluator подтверждает это.

0 ответов

Другие вопросы по тегам