@Nullable
    static ExpressionEvaluator cacheOrGet(String propertyName,
                                          EventRequest request,
                                          PsiElement context,
                                          TextWithImports text,
                                          EvaluatingComputable<? extends ExpressionEvaluator> supplier) throws EvaluateException {
      EvaluatorCache cache = (EvaluatorCache)request.getProperty(propertyName);
      if (cache != null && Objects.equals(cache.myContext, context) && Objects.equals(cache.myTextWithImports, text)) {
        return cache.myEvaluator;
      }
      ExpressionEvaluator evaluator = supplier.compute();
      request.putProperty(propertyName, new EvaluatorCache(context, text, evaluator));
      return evaluator;
    }
@Nullable
    static ExpressionEvaluator cacheOrGet(String propertyName,
                                          EventRequest request,
                                          PsiElement context,
                                          TextWithImports text,
                                          EvaluatingComputable<? extends ExpressionEvaluator> supplier)