code: private String[] extractConstructorParameters(Key<?> factoryKey, TypeLiteral<?> implementation,
        Constructor constructor, List<Key<?>> methodParams, Errors errors,
        Set<Dependency> dependencyCollector) throws ErrorsException {
  
      // Get parameters with annotations.
      List<TypeLiteral<?>> ctorParams = implementation.getParameterTypes(constructor);
      Annotation[][] ctorParamAnnotations = constructor.getParameterAnnotations();
  
      int p = 0;
      String[] parameterNames = new String[ctorParams.size()];
      Set<Key<?>> keySet = new LinkedHashSet<Key<?>>();
      for (TypeLiteral<?> ctorParam : ctorParams) {
        Key<?> ctorParamKey = getKey(ctorParam, constructor, ctorParamAnnotations[p], errors);
  
        if (ctorParamKey.getAnnotationType() == Assisted.class) {
          if (!keySet.add(ctorParamKey)) {
            errors.addMessage(PrettyPrinter.format(
                "%s has more than one parameter of type %s annotated with @Assisted(\"%s\").  " +
                "Please specify a unique value with the annotation to avoid confusion.",
                implementation, ctorParamKey.getTypeLiteral().getType(), 
                ((Assisted) ctorParamKey.getAnnotation()).value()));
          }
          
          int location = methodParams.indexOf(ctorParamKey);
  
          // This should never happen since the constructor was already checked
          // in #[inject]constructorHasMatchingParams(..).
          Preconditions.checkState(location != -1);
  
          parameterNames[p] = ReflectUtil.formatParameterName(location);
        } else {
          dependencyCollector.add(new Dependency(factoryKey, ctorParamKey, false, true,
              constructor.toString()));
        }
  
        p++;
      }
  
      return parameterNames;
    }
docs: Matches constructor parameters to method parameters for injection and
  records remaining parameters as required keys.