code: public int pushTypeVariables (GenericsHierarchy hierarchy, GenericType[] args) {
  		int startSize = this.argumentsSize;
  
  		// Ensure arguments capacity.
  		int sizeNeeded = startSize + hierarchy.total;
  		if (sizeNeeded > arguments.length) {
  			Type[] newArray = new Type[Math.max(sizeNeeded, arguments.length << 1)];
  			System.arraycopy(arguments, 0, newArray, 0, startSize);
  			arguments = newArray;
  		}
  
  		// Resolve and store the type arguments.
  		int[] counts = hierarchy.counts;
  		TypeVariable[] params = hierarchy.parameters;
  		for (int i = 0, p = 0, n = args.length; i < n; i++) {
  			GenericType arg = args[i];
  			Class resolved = arg.resolve(this);
  			if (resolved == null) continue;
  			int count = counts[i];
  			if (arg == null)
  				p += count;
  			else {
  				for (int nn = p + count; p < nn; p++) {
  					arguments[argumentsSize] = params[p];
  					arguments[argumentsSize + 1] = resolved;
  					argumentsSize += 2;
  				}
  			}
  		}
  
  		return argumentsSize - startSize;
  	}
docs: Stores the types of the type parameters for the specified class hierarchy. Must be balanced by
  {@link #popTypeVariables(int)} if >0 is returned.
  @param args May contain null for type arguments that aren't known.
  @return The number of entries that were pushed.