Package xyz.cofe.cxel.eval
Class EvalContext
java.lang.Object
xyz.cofe.cxel.eval.EvalContext
public class EvalContext
extends java.lang.Object
Контекст интерпретации.
Контекст содержит в себе:
- Переменные - см
read(String),bind(String, Object) - Глобальные операторы -
Каждый оператор (+,-,*, и т.д.) является функцией от двух аргументов
см.bindStaticMethod(Method),bindStaticMethods(Class)
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceEvalContext.MapBuilderСоздание карты -
Field Summary
Fields Modifier and Type Field Description protected ContextPreparingCallscontextPreparingCallsprotected ReflectPreparingCallsreflectCallsprotected CallScoring<? super PreparedCall>scoringprotected java.util.function.Predicate<java.lang.reflect.Method>securityFilterprotected java.util.concurrent.locks.ReadWriteLocksecurityFilterLocks -
Constructor Summary
Constructors Constructor Description EvalContext()Конструктор по умолчаниюEvalContext(java.lang.Iterable<xyz.cofe.fn.Tuple2<java.lang.String,java.lang.Object>> vars)КонструкторEvalContext(java.util.Map<java.lang.String,java.lang.Object> vars)Конструктор -
Method Summary
Modifier and Type Method Description EvalContextbind(java.lang.String name, java.lang.Object value)Определение пременной и запись значения в переменную<A0, A1, Z> EvalContextbindFn(java.lang.String name, java.lang.Class<A0> targ0, java.lang.Class<A1> targ1, java.lang.Class<Z> returnType, java.util.function.BiFunction<A0,A1,Z> fn)<A0, Z> EvalContextbindFn(java.lang.String name, java.lang.Class<A0> targ0, java.lang.Class<Z> returnType, java.util.function.Function<A0,Z> fn)<Z> EvalContextbindFn(java.lang.String name, java.lang.Class<Z> returnType, java.util.function.Supplier<Z> fn)EvalContextbindStaticMethod(java.lang.reflect.Method method)Добавление статичного метода как глобальную функциюEvalContextbindStaticMethod(java.lang.String name, java.lang.reflect.Method method)Добавление статичного метода как глобальную функциюEvalContextbindStaticMethods(java.lang.Class<?> cls)Добавление статичных методов.java.lang.Objectbool(BooleanAST ast)Интерпретация булевоjava.lang.Objectcall(java.lang.String method, java.util.List<java.lang.Object> args)Вызов методаbooleancondition(java.lang.Object value)Проверка значения условия (if / ?)EvalContextconfigure(java.util.function.Consumer<EvalContext> conf)КонфигуриованиеContextPreparingCallscontextPreparingCalls()java.lang.Objectget(java.lang.Object base, java.lang.String propertyName)Чтение свойстваjava.lang.ObjectgetAt(java.lang.Object base, java.lang.Object idx)Чтение элемента массиваCallScoring<? super PreparedCall>getScoring()java.util.function.Predicate<java.lang.reflect.Method>getSecurityFilter()java.util.List<java.lang.Object>list(java.lang.Object[] items)Создание списка элементовEvalContext.MapBuildermap()Создаение картыjava.lang.ObjectnullLiteral(NullAST ast)Интерпретация null литералаjava.lang.Objectnumber(NumberAST ast)Интерпретация числаjava.lang.Objectread(java.lang.String name)Чтение переменнойReflectPreparingCallsreflectPreparingCalls()protected EvalContextreflectPreparingCalls(ReflectPreparingCalls calls)voidsetScoring(CallScoring<? super PreparedCall> scoring)voidsetSecurityFilter(java.util.function.Predicate<java.lang.reflect.Method> sfilter)java.lang.Objectstring(StringAST ast)Интерпретация строкиjava.util.Optional<java.lang.Object>tryRead(java.lang.String name)Попытка чтения переменной
-
Field Details
-
reflectCalls
-
contextPreparingCalls
-
scoring
-
securityFilterLocks
protected final java.util.concurrent.locks.ReadWriteLock securityFilterLocks -
securityFilter
protected java.util.function.Predicate<java.lang.reflect.Method> securityFilter
-
-
Constructor Details
-
EvalContext
public EvalContext()Конструктор по умолчанию -
EvalContext
public EvalContext(java.util.Map<java.lang.String,java.lang.Object> vars)Конструктор- Parameters:
vars- началное значение переменных
-
EvalContext
public EvalContext(java.lang.Iterable<xyz.cofe.fn.Tuple2<java.lang.String,java.lang.Object>> vars)Конструктор- Parameters:
vars- началное значение переменных
-
-
Method Details
-
configure
Конфигуриование- Parameters:
conf- конфигурация- Returns:
- self ссылка
-
tryRead
public java.util.Optional<java.lang.Object> tryRead(java.lang.String name)Попытка чтения переменной- Parameters:
name- имя переменной- Returns:
- значение переменной если она определена
-
bind
Определение пременной и запись значения в переменную- Parameters:
name- имя переменнойvalue- значение
-
read
public java.lang.Object read(java.lang.String name)Чтение переменной- Parameters:
name- имя переменной- Returns:
- значение переменной
-
bindStaticMethod
Добавление статичного метода как глобальную функцию- Parameters:
name- имя функции, может быть null, тогда будет использоваться имя методаmethod- метод
-
bindStaticMethod
Добавление статичного метода как глобальную функцию- Parameters:
method- метод
-
bindStaticMethods
Добавление статичных методов.
Методы должны быть помечены аннотациейFnNameи должны быть статичными.
Пример:
@FnName("+")
public static int add( int a, int b ){
return a+b;
}- Parameters:
cls- Класс контейнер статичных методов
-
bindFn
public <Z> EvalContext bindFn(java.lang.String name, java.lang.Class<Z> returnType, java.util.function.Supplier<Z> fn) -
bindFn
public <A0, Z> EvalContext bindFn(java.lang.String name, java.lang.Class<A0> targ0, java.lang.Class<Z> returnType, java.util.function.Function<A0,Z> fn) -
bindFn
public <A0, A1, Z> EvalContext bindFn(java.lang.String name, java.lang.Class<A0> targ0, java.lang.Class<A1> targ1, java.lang.Class<Z> returnType, java.util.function.BiFunction<A0,A1,Z> fn) -
reflectPreparingCalls
-
reflectPreparingCalls
-
contextPreparingCalls
-
getScoring
-
setScoring
-
call
public java.lang.Object call(java.lang.String method, java.util.List<java.lang.Object> args)Вызов метода- Parameters:
method- имя метода или имя оператораargs- аргументы- Returns:
- результат вызова
-
getSecurityFilter
public java.util.function.Predicate<java.lang.reflect.Method> getSecurityFilter() -
setSecurityFilter
public void setSecurityFilter(java.util.function.Predicate<java.lang.reflect.Method> sfilter) -
get
public java.lang.Object get(java.lang.Object base, java.lang.String propertyName)Чтение свойства- Parameters:
base- Объект, чье свойство интересуетpropertyName- имя свойства- Returns:
- значение свойства
-
getAt
public java.lang.Object getAt(java.lang.Object base, java.lang.Object idx)Чтение элемента массива- Parameters:
base- Объект (список или массив), чей элемент интересуетidx- индекс элемента- Returns:
- значение
-
number
Интерпретация числа- Parameters:
ast- число (токен/лексема)- Returns:
- число (значение)
-
bool
Интерпретация булево- Parameters:
ast- булево (токен/лексема)- Returns:
- булево (значение)
-
string
Интерпретация строки- Parameters:
ast- строка (токен/лексема)- Returns:
- строка (значение)
-
nullLiteral
Интерпретация null литерала- Parameters:
ast- null литерал (токен/лексема)- Returns:
- null (значение)
-
list
public java.util.List<java.lang.Object> list(java.lang.Object[] items)Создание списка элементов- Parameters:
items- список элементов- Returns:
- список
-
map
Создаение карты- Returns:
- строитель карты
-
condition
public boolean condition(java.lang.Object value)Проверка значения условия (if / ?)- Parameters:
value- значение в условии- Returns:
- реузльтат проверки
-