code: protected List<Parameter> getParameters(Type type, List<Annotation> annotations, Set<Type> typesToSkip) {
          if (!hasValidAnnotations(annotations) || isApiParamHidden(annotations)) {
              return Collections.emptyList();
          }
  
          Iterator<SwaggerExtension> chain = SwaggerExtensions.chain();
          List<Parameter> parameters = new ArrayList<>();
          Class<?> cls = TypeUtils.getRawType(type, type);
          LOG.debug("Looking for path/query/header/form/cookie params in " + cls);
  
          if (chain.hasNext()) {
              SwaggerExtension extension = chain.next();
              LOG.debug("trying extension " + extension);
              parameters = extension.extractParameters(annotations, type, typesToSkip, chain);
          }
  
          if (!parameters.isEmpty()) {
              for (Parameter parameter : parameters) {
                  ParameterProcessor.applyAnnotations(swagger, parameter, type, annotations);
              }
          } else {
              LOG.debug("Looking for body params in " + cls);
              // parameters is guaranteed to be empty at this point, replace it with a mutable collection
              parameters = Lists.newArrayList();
              if (!typesToSkip.contains(type)) {
                  Parameter param = ParameterProcessor.applyAnnotations(swagger, null, type, annotations);
                  if (param != null) {
                      parameters.add(param);
                  }
              }
          }
          return parameters;
      }
docs: this method exists so that outside callers can choose their own custom types to skip