@Override
    public CachedValueProvider.Result<Map<Pair<QName, Integer>, Function>> compute(XmlFile param) {
      final XmlTag rootTag = param.getRootTag();
      assert rootTag != null;

      final Map<Pair<QName, Integer>, Function> candidates = new HashMap<>();
      final XsltFunction[] functions = XsltElementFactory.getInstance().wrapElement(rootTag, XsltStylesheet.class).getFunctions();
      for (XsltFunction function : functions) {
        candidates.put(Pair.create(function.getQName(), function.getParameters().length), function);
      }

      final Collection<XmlFile> data = ResolveUtil.getDependencies(param);
      final Object[] dependencies;
      if (data == null || data.size() == 0) {
        dependencies = new Object[]{ param };
      } else {
        data.add(param);
        dependencies = ArrayUtil.toObjectArray(data);
      }
      return CachedValueProvider.Result.create(candidates, dependencies);
    }
@Override
    public CachedValueProvider.Result<Map<Pair<QName, Integer>, Function>> compute(XmlFile param)