code: protected MatchType getMatchType(TypeName m) {
      return match(m)
          .when(typeOf(ParameterizedTypeName.class)).get(
              t -> {
                if (isDecomposableBuilder(t.rawType)) {
                  return MatchType.DECOMPOSE;
                } else if (t.rawType.equals(MATCH_ANY)) {
                  return MatchType.ANY;
                } else if (t.rawType.equals(MATCH_EXACT)) {
                  return MatchType.EXACT;
                } else {
                  return MatchType.EXACT;
                }
              })
          .when(typeOf(TypeVariableName.class)).get(t -> MatchType.EXACT)
          .orElse(MatchType.ANY)
          .getMatch();
    }
docs: Returns the type of match to use for a given type.