code: String computeSpecifiedArgPart(String[] keys, List<String> jsonArgs, List<String> paramNames) {
  		StringBuilder sb = new StringBuilder("[");
  		boolean first = true;
  		for (String key : keys) {
  			if (!first) {
  				sb.append(",");
  			}
  			first = false;
  			String[] path = key.split("\\.");
  			logger.debug("Process '{}' : {} token(s)", key, path.length);
  			String paramName = path[0];
  			int idx = paramNames.indexOf(paramName);
  			logger.debug("Index of param '{}' : '{}'", paramName, idx);
  			String jsonArg = jsonArgs.get(idx);
  			logger.debug("Param '{}' : '{}'", paramName, jsonArg);
  			sb.append(processArg(Arrays.copyOfRange(path, 1, path.length), jsonArg));
  		}
  		sb.append("]");
  		return sb.toString();
  	}
docs: Compute the part of cache key that depends of arguments
  
  @param keys : key from annotation
  @param jsonArgs : actual args
  @param paramNames : parameter name of concern method
  @return