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); }