private static bool IsParameterSupported(OracleCodeCompletionFunctionOverload programOverload, int parameterIndex, string parameterName)
		{
			var namedParameterExists = GetNamedParameterIndex(programOverload, parameterName, out var namedParameterIndex);
			if (programOverload.CurrentParameterIndex == namedParameterIndex)
			{
				return true;
			}

			return programOverload.CurrentParameterIndex == parameterIndex && !namedParameterExists;
		}
		private static bool HasSingleLiteralParameterOrNoParameterToken(OracleCodeCompletionFunctionOverload functionOverload, string literalTerminalId, int? parameterIndex)
		{
			parameterIndex = parameterIndex ?? functionOverload.CurrentParameterIndex;
			if (parameterIndex >= functionOverload.ProgramReference.ParameterReferences.Count)
			{
				return functionOverload.ProgramReference.ParameterReferences.Count == parameterIndex;
			}

			var firstParameter = functionOverload.ProgramReference.ParameterReferences[parameterIndex.Value];
			var parameterExpression = firstParameter.ParameterNode[NonTerminals.Expression];
			return parameterExpression != null && parameterExpression.ChildNodes.Count == 1 && parameterExpression.ChildNodes[0].Id == literalTerminalId;
		}
		private static bool GetNamedParameterIndex(OracleCodeCompletionFunctionOverload programOverload, string parameterName, out int parameterIndex)
		{
			var namedParameterExists = false;
			for (var i = 0; i < programOverload.ProgramReference.ParameterReferences.Count; i++)
			{
				var parameterReference = programOverload.ProgramReference.ParameterReferences[i];
				if (parameterReference.OptionalIdentifierTerminal == null)
				{
					continue;
				}

				namedParameterExists = true;

				if (String.Equals(parameterName, parameterReference.OptionalIdentifierTerminal.Token.Value.ToQuotedIdentifier()))
				{
					parameterIndex = i;
					return true;
				}
			}

			parameterIndex = -1;
			return namedParameterExists;
		}
		private static bool HasSingleNumberLiteralParameterOrNoParameterToken(OracleCodeCompletionFunctionOverload functionOverload, int? parameterIndex = null)
		{
			return HasSingleLiteralParameterOrNoParameterToken(functionOverload, Terminals.NumberLiteral, parameterIndex);
		}