Class EvalContext

java.lang.Object
xyz.cofe.cxel.eval.EvalContext

public class EvalContext
extends java.lang.Object
Контекст интерпретации.

Контекст содержит в себе:

  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static interface  EvalContext.MapBuilder
    Создание карты
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.util.HashMap<java.lang.String,​PreparedCall> cacheCalls
    Кеш вызываемых конструкций
    protected ContextPreparingCalls contextPreparingCalls  
    protected ReflectPreparingCalls reflectCalls  
    protected CallScoring<? super PreparedCall> scoring  
    protected java.util.function.Predicate<java.lang.reflect.Method> securityFilter  
    protected java.util.concurrent.locks.ReadWriteLock securityFilterLocks  
  • 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
    EvalContext bind​(java.lang.String name, java.lang.Object value)
    Определение пременной и запись значения в переменную
    <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)  
    <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)  
    <Z> EvalContext bindFn​(java.lang.String name, java.lang.Class<Z> returnType, java.util.function.Supplier<Z> fn)  
    EvalContext bindStaticMethod​(java.lang.reflect.Method method)
    Добавление статичного метода как глобальную функцию
    EvalContext bindStaticMethod​(java.lang.String name, java.lang.reflect.Method method)
    Добавление статичного метода как глобальную функцию
    EvalContext bindStaticMethods​(java.lang.Class<?> cls)
    Добавление статичных методов.
    java.lang.Object bool​(BooleanAST ast)
    Интерпретация булево
    java.lang.Object call​(java.lang.String method, java.util.List<java.lang.Object> args)
    Вызов метода
    boolean condition​(java.lang.Object value)
    Проверка значения условия (if / ?)
    EvalContext configure​(java.util.function.Consumer<EvalContext> conf)
    Конфигуриование
    ContextPreparingCalls contextPreparingCalls()  
    java.lang.Object get​(java.lang.Object base, java.lang.String propertyName)
    Чтение свойства
    java.lang.Object getAt​(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.MapBuilder map()
    Создаение карты
    java.lang.Object nullLiteral​(NullAST ast)
    Интерпретация null литерала
    java.lang.Object number​(NumberAST ast)
    Интерпретация числа
    java.lang.Object read​(java.lang.String name)
    Чтение переменной
    ReflectPreparingCalls reflectPreparingCalls()  
    protected EvalContext reflectPreparingCalls​(ReflectPreparingCalls calls)  
    void setScoring​(CallScoring<? super PreparedCall> scoring)  
    void setSecurityFilter​(java.util.function.Predicate<java.lang.reflect.Method> sfilter)  
    java.lang.Object string​(StringAST ast)
    Интерпретация строки
    java.util.Optional<java.lang.Object> tryRead​(java.lang.String name)
    Попытка чтения переменной

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • 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

      public EvalContext configure​(java.util.function.Consumer<EvalContext> conf)
      Конфигуриование
      Parameters:
      conf - конфигурация
      Returns:
      self ссылка
    • tryRead

      public java.util.Optional<java.lang.Object> tryRead​(java.lang.String name)
      Попытка чтения переменной
      Parameters:
      name - имя переменной
      Returns:
      значение переменной если она определена
    • bind

      public EvalContext bind​(java.lang.String name, java.lang.Object value)
      Определение пременной и запись значения в переменную
      Parameters:
      name - имя переменной
      value - значение
    • read

      public java.lang.Object read​(java.lang.String name)
      Чтение переменной
      Parameters:
      name - имя переменной
      Returns:
      значение переменной
    • bindStaticMethod

      public EvalContext bindStaticMethod​(java.lang.String name, java.lang.reflect.Method method)
      Добавление статичного метода как глобальную функцию
      Parameters:
      name - имя функции, может быть null, тогда будет использоваться имя метода
      method - метод
    • bindStaticMethod

      public EvalContext bindStaticMethod​(java.lang.reflect.Method method)
      Добавление статичного метода как глобальную функцию
      Parameters:
      method - метод
    • bindStaticMethods

      public EvalContext bindStaticMethods​(java.lang.Class<?> cls)
      Добавление статичных методов.
      Методы должны быть помечены аннотацией 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

      public ReflectPreparingCalls reflectPreparingCalls()
    • reflectPreparingCalls

      protected EvalContext reflectPreparingCalls​(ReflectPreparingCalls calls)
    • contextPreparingCalls

      public ContextPreparingCalls contextPreparingCalls()
    • getScoring

      public CallScoring<? super PreparedCall> getScoring()
    • setScoring

      public void setScoring​(CallScoring<? super PreparedCall> scoring)
    • 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

      public java.lang.Object number​(NumberAST ast)
      Интерпретация числа
      Parameters:
      ast - число (токен/лексема)
      Returns:
      число (значение)
    • bool

      public java.lang.Object bool​(BooleanAST ast)
      Интерпретация булево
      Parameters:
      ast - булево (токен/лексема)
      Returns:
      булево (значение)
    • string

      public java.lang.Object string​(StringAST ast)
      Интерпретация строки
      Parameters:
      ast - строка (токен/лексема)
      Returns:
      строка (значение)
    • nullLiteral

      public java.lang.Object nullLiteral​(NullAST ast)
      Интерпретация null литерала
      Parameters:
      ast - null литерал (токен/лексема)
      Returns:
      null (значение)
    • list

      public java.util.List<java.lang.Object> list​(java.lang.Object[] items)
      Создание списка элементов
      Parameters:
      items - список элементов
      Returns:
      список
    • map

      public EvalContext.MapBuilder map()
      Создаение карты
      Returns:
      строитель карты
    • condition

      public boolean condition​(java.lang.Object value)
      Проверка значения условия (if / ?)
      Parameters:
      value - значение в условии
      Returns:
      реузльтат проверки