/* package whatever;  */

import java.util.*;
import java.lang.*;
import java.io.*;

class ArgumentsParser
{
	final static String DELIMITER = ",";
	final static String PARENTHESES_START = "(";
	final static String PARENTHESES_END = ")";

	public static List<String> parseArguments(String text) {
		List<String> arguments = new ArrayList<>();
		StringBuilder argParsed = new StringBuilder();

		StringTokenizer st = new StringTokenizer(text, DELIMITER);
		while (st.hasMoreElements()) {
			String token = st.nextToken();
			System.out.println("Token: " + token);
			argParsed.append(token);
			if (token.contains(PARENTHESES_START)) {
				System.out.println("Nested expression with ( starting: " + token);
				while(st.hasMoreElements() && !token.contains(PARENTHESES_END)) {
					token=st.nextToken();
					System.out.println("Token inside nested expression: " + token);
					argParsed.append(DELIMITER);
					argParsed.append(token);
				}
				System.out.println("Nested expression with ) ending: " + token);
			}
			arguments.add(argParsed.toString());
			argParsed.setLength(0);
		}

		return arguments;
	}
	
	public static void main (String[] args) throws java.lang.Exception {

		String textInside = "date1, calculatedDate(currentDate, 35), false, (a+b), x.toString()";

		System.out.println("Arguments found: " + parseArguments(textInside));
	}
}