@Override
  public Object invoke(final DomInvocationHandler handler, final Object[] args) throws Throwable {
    if (myConverter == Converter.EMPTY_CONVERTER) {
      return getValueInner(handler, myConverter);
    }

    CachedValue<List<Pair<Converter,Object>>> value = handler.getUserData(DOM_VALUE_KEY);
    if (value == null) {
      final DomManagerImpl domManager = handler.getManager();
      final Project project = domManager.getProject();
      final CachedValuesManager cachedValuesManager = CachedValuesManager.getManager(project);
      handler.putUserData(DOM_VALUE_KEY, value = cachedValuesManager.createCachedValue(() -> {
        List<Pair<Converter, Object>> list = ContainerUtil.createLockFreeCopyOnWriteList();
        return CachedValueProvider.Result
          .create(list, PsiModificationTracker.MODIFICATION_COUNT, domManager, ProjectRootManager.getInstance(project));
      }, false));
    }

    return getOrCalcValue(handler, value.getValue());
  }
@Override
  public Object invoke(final DomInvocationHandler handler, final Object[] args)