code: private void tryEliminateConstantArgs(ArrayList<Node> refs) {
      List<Parameter> parameters = findFixedArguments(refs);
      if (parameters == null) {
        return;
      }
  
      ImmutableListMultimap<Node, Node> fns = ReferenceMap.getFunctionNodes(refs);
      if (fns.size() > 1) {
        // TODO(johnlenz): support moving simple constants.
        // This requires cloning the tree and avoiding adding additional calls/definitions that will
        // invalidate the reference map
        return;
      }
  
      // Only one definition is currently supported.
      Node fn = Iterables.getOnlyElement(fns.values());
  
      boolean continueLooking = adjustForConstraints(fn, parameters);
      if (!continueLooking) {
        return;
      }
  
      // Found something to do, move the values from the call sites to the function definitions.
      for (Node n : refs) {
        if (ReferenceMap.isCallOrNewTarget(n) && !alreadyRemoved(n)) {
          optimizeCallSite(parameters, n);
        }
      }
  
      optimizeFunctionDefinition(parameters, fn);
    }
docs: Eliminate parameters if they are always constant.
  
  function foo(a, b) {...}
  foo(1,2);
  foo(1,3)
  becomes
  function foo(b) { var a = 1 ... }
  foo(2);
  foo(3);
  
  @param refs A list of references to the symbol (name or property) as vetted by
  #isCandidate.