public static List<String> getTypeNameList(String methodDescriptor, boolean fullyQualifiedName,
			boolean replaceSlash) {
		ArrayList<String> typeNames = new ArrayList<>();
		int closeParenIndex = methodDescriptor.indexOf(")");
		String argString = methodDescriptor.substring(1, closeParenIndex);
		String currentParamTypeName;

		int currentPosition = 0;
		int len = argString.length();
		while (currentPosition < len) {
			String currentParam = argString.substring(currentPosition, currentPosition + 1);
			if (currentParam.equals("[")) {
				int initialBracket = currentPosition;
				while (argString.charAt(currentPosition) == '[') {
					currentPosition++;
				}
				//advance past the base type of the array
				if (argString.charAt(currentPosition) == 'L') {
					int semiColonIndex = argString.indexOf(";", currentPosition);
					currentPosition = semiColonIndex + 1;
				}
				else {
					currentPosition++;
				}
				currentParamTypeName =
					getTypeNameFromDescriptor(argString.substring(initialBracket, currentPosition),
						fullyQualifiedName, replaceSlash);
				typeNames.add(currentParamTypeName);
				continue;
			}
			//advance to next type in argString
			//if it's a reference, it starts with L and ends with a ;
			//otherwise you only need to advance one character
			switch (currentParam) {
				case "L":
					int semiColonIndex = argString.indexOf(";", currentPosition);
					currentParamTypeName = getTypeNameFromDescriptor(
						argString.substring(currentPosition, semiColonIndex + 1),
						fullyQualifiedName, replaceSlash);
					currentPosition = semiColonIndex + 1; //advance past ;
					break;
				default:
					currentParamTypeName =
						getTypeNameFromDescriptor(currentParam, fullyQualifiedName, replaceSlash);
					currentPosition++;
			}
			typeNames.add(currentParamTypeName);

		}

		//now add the name of the return type
		String returnType =
			methodDescriptor.substring(closeParenIndex + 1, methodDescriptor.length());
		typeNames.add(getTypeNameFromDescriptor(returnType, fullyQualifiedName, replaceSlash));
		return typeNames;
	}
Returns an ordered list of the type names corresponding to the parameters and return of a method.
@param methodDescriptor
@return
Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/format/DescriptorDecoder.java