package org.bndtools.templating.engine.mustache; import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.github.mustachejava.Binding; import com.github.mustachejava.Code; import com.github.mustachejava.ObjectHandler; import com.github.mustachejava.TemplateContext; import com.github.mustachejava.reflect.BaseObjectHandler; import com.github.mustachejava.util.GuardException; import com.github.mustachejava.util.Wrapper; /** * A Mustache ObjectHandler that accumulates the names of requested parameters */ class AccumulateNamesObjectHandler extends BaseObjectHandler { private final ObjectHandler delegateHandler; private final Set<String> names = new HashSet<>(); AccumulateNamesObjectHandler(ObjectHandler delegateHandler) { this.delegateHandler = delegateHandler; } @Override public Wrapper find(final String name, Object[] scopes) { final Wrapper delegateWrapper = delegateHandler.find(name, scopes); return new Wrapper() { @Override public Object call(Object[] scopes) throws GuardException { names.add(name); return delegateWrapper.call(scopes); } }; } @Override public Binding createBinding(final String name, TemplateContext context, Code code) { final Binding delegateBinding = delegateHandler.createBinding(name, context, code); return new Binding() { @Override public Object get(Object[] scopes) { names.add(name); return delegateBinding.get(scopes); } }; } public Set<String> getNames() { return Collections.unmodifiableSet(names); } }