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 подтверждает это.