private void AddCmdAndAliasesToCommandDatas(CommandMethodData methodData, string cmd) { AddToCommandData(methodData, cmd); foreach (var alias in methodData.Aliases) { AddToCommandData(methodData, alias); } }
private void AddToCommandData(CommandMethodData methodData, string cmdOrAlias) { if (!_commandDatas.TryGetValue(cmdOrAlias, out var data)) { data = new CommandData(cmdOrAlias); _commandDatas[cmdOrAlias] = data; } data.Methods.Add(methodData); }
private void AddUsageText(StringBuilder strBuilder, string cmd, CommandMethodData methodData) { strBuilder.Append(_configuration.CommandPrefix + cmd); foreach (var parameter in methodData.UserParameters) { strBuilder.Append($" [{parameter.Name}"); if (_configuration.UsageAddDefaultValues && parameter.HasDefaultValue) { strBuilder.Append($" = {(parameter.DefaultValue?.ToString() ?? _configuration.NullDefaultValueName)}"); } strBuilder.Append("]"); } }
private void AddMethod(MethodInfo method) { var cmdAttribute = method.GetCustomAttribute <CustomCommandAttribute>() !; var fastInvokeHandler = _fastMethodInvoker.GetMethodInvoker(method); var methodData = new CommandMethodData(method, fastInvokeHandler, cmdAttribute.Priority); methodData.UserParameters = GetUserParameterInformation(method, methodData).ToList(); if (!AddInstanceIfRequired(method, methodData)) { return; } methodData.CompleteInitialization(); AddCmdAndAliasesToCommandDatas(methodData, cmdAttribute.Command); }
private bool AddInstanceIfRequired(MethodInfo method, CommandMethodData methodData) { if (method.IsStatic) { return(true); } var instance = GetMethodInstance(method); if (instance is null) { _logger.LogWarning($"Method {method.Name} in class {method.DeclaringType!.FullName} can not be added because " + $"it's neither static nor an object of the class can be created (e.g. because of missing parameterless constructor or being a static/abstract class."); return(false); } methodData.Instance = instance; return(true); }
private IEnumerable <ParameterInfo> GetUserInputParameters(MethodInfo method, CommandMethodData commandMethodData) { var methodParameters = method.GetParameters(); var userParametersStartIndex = commandMethodData.UserParametersStartIndex; return(methodParameters.Skip(userParametersStartIndex)); }
private IEnumerable <CommandParameterData> GetUserParameterInformation(MethodInfo method, CommandMethodData commandMethodData) { var userInputParameters = GetUserInputParameters(method, commandMethodData).ToList(); for (var i = 0; i < userInputParameters.Count; ++i) { if (commandMethodData.RemainingParamsToStringIndex.HasValue) { yield break; } var parameter = userInputParameters[i]; var parameterData = new CommandParameterData { UserInputLength = GetUserInputAmountForArg(parameter), HasDefaultValue = parameter.HasDefaultValue, DefaultValue = parameter.DefaultValue, IsRemainingText = IsRemainingText(parameter), IsNullable = IsNullable(parameter), Name = parameter.Name, Type = parameter.ParameterType }; yield return(parameterData); } }