Example #1
0
 private void AddCmdAndAliasesToCommandDatas(CommandMethodData methodData, string cmd)
 {
     AddToCommandData(methodData, cmd);
     foreach (var alias in methodData.Aliases)
     {
         AddToCommandData(methodData, alias);
     }
 }
Example #2
0
 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);
 }
Example #3
0
 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("]");
     }
 }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        private IEnumerable <ParameterInfo> GetUserInputParameters(MethodInfo method, CommandMethodData commandMethodData)
        {
            var methodParameters         = method.GetParameters();
            var userParametersStartIndex = commandMethodData.UserParametersStartIndex;

            return(methodParameters.Skip(userParametersStartIndex));
        }
Example #7
0
        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);
            }
        }