private boolean isMatcher(Type.Reference reference) {
      // is matcher
      Element element = elements.getTypeElement(reference.name);
      if (element != null && types.isSubtype(element.asType(), elements.getTypeElement(MATCHER).asType())) {
        return true;
      }

      return attribute.hasCriteria();
    }
Criteria templates are always generated as top-level class (separate file).
Construct criteria name from {@linkplain TypeMirror}

@return fully qualified criteria (template) class name
value-processor/src/org/immutables/value/processor/meta/CriteriaModel.java