code: protected InferredPrototype createPrototype(QualifiedActionName id,
  			boolean isVarargs, FormalParameterProvider parameters) {
  		assert parameters != null;
  		final ActionParameterTypes key = new ActionParameterTypes(isVarargs, parameters.getFormalParameterCount());
  		final Map<ActionParameterTypes, List<InferredStandardParameter>> ip = buildSignaturesForArgDefaultValues(
  				id.getDeclaringType(),
  				key.toActionPrototype(id.getActionName()).toActionId(),
  				parameters, key);
  		final List<InferredStandardParameter> op = ip.remove(key);
  		final InferredPrototype proto = new DefaultInferredPrototype(
  				id,
  				parameters,
  				key,
  				op,
  				ip);
  		final String containerID = id.getContainerID();
  		Map<String, Map<ActionParameterTypes, InferredPrototype>> c = this.prototypes.get(containerID);
  		if (c == null) {
  			c = new TreeMap<>();
  			this.prototypes.put(containerID, c);
  		}
  		Map<ActionParameterTypes, InferredPrototype> list = c.get(id.getActionName());
  		if (list == null) {
  			list = new TreeMap<>();
  			c.put(id.getActionName(), list);
  		}
  		list.put(key, proto);
  		return proto;
  	}
docs: Build and replies the inferred action signature for the element with
  the given ID. This function creates the different signatures according
  to the definition, or not, of default values for the formal parameters.
  
  @param id identifier of the function.
  @param isVarargs indicates if the signature has a variatic parameter.
  @param parameters list of the formal parameters of the function.
  @return the signature or <code>null</code> if none.