Пример #1
0
 public TwoFerSolution(ParsedSolution solution) : base(solution.Solution, solution.SyntaxRoot)
 {
     TwoFerClass        = solution.SyntaxRoot.GetClass("TwoFer");
     SpeakMethod        = TwoFerClass.GetMethod("Speak");
     InputParameter     = SpeakMethod?.ParameterList.Parameters.FirstOrDefault();
     ReturnedExpression = SpeakMethod?.ReturnedExpression();
     Variable           = SpeakMethod?.AssignedVariable();
 }
Пример #2
0
 private static bool WritesToConsole(this ParsedSolution parsedSolution) =>
 parsedSolution.SyntaxRoot.InvokesMethod(
     SimpleMemberAccessExpression(
         IdentifierName("Console"),
         IdentifierName("WriteLine"))) ||
 parsedSolution.SyntaxRoot.InvokesMethod(
     SimpleMemberAccessExpression(
         IdentifierName("Console"),
         IdentifierName("Write")));
        public static TwoFerSolution Parse(ParsedSolution solution)
        {
            var twoFerClass                   = solution.SyntaxRoot.GetClass("TwoFer");
            var speakMethod                   = twoFerClass.GetMethod("Speak");
            var speakMethodParameter          = speakMethod?.ParameterList.Parameters.FirstOrDefault();
            var speakMethodReturnedExpression = speakMethod?.ReturnedExpression();
            var speakMethodVariable           = speakMethod?.AssignedVariable();
            var twoFerError                   = ToTwoFerError(twoFerClass, speakMethod, speakMethodParameter);

            return(new TwoFerSolution(solution, twoFerClass, speakMethod, speakMethodParameter, speakMethodReturnedExpression, speakMethodVariable, twoFerError));
        }
Пример #4
0
        static void Main(string[] args)
        {
            ResultsDirectory = Path.Combine(Directory.GetCurrentDirectory(), DateTime.Now.ToString("yyyy_MM_dd - HH_mm_ss"));
            Directory.CreateDirectory(ResultsDirectory);

            log4net.GlobalContext.Properties["LogName"] = Path.Combine(ResultsDirectory, "Maggot.log");
            _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            StartTime = DateTime.Now;

            if (args.Length != 1)
            {
                Console.WriteLine("Syntax is 'maggot <solution_to_process>'.");
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
                return;
            }

            InputSolutionFile = args[0];

            if (!File.Exists(InputSolutionFile))
            {
                Console.WriteLine("Specified solution file does not exist.");
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
                return;
            }

            _log.Info("Beginning analysis of " + InputSolutionFile);
            ParseSolution();
            _log.Info("=============================");
            _log.Info("Projects: " + ParsedSolution.Count);
            _log.Info("Implementation Files: " + ParsedSolution.SelectMany(x => x.Value).Count());
            _log.Info("=============================");

            _log.Info("Beginning debridement");
            var projectCounter = 1;

            foreach (var project in ParsedSolution)
            {
                _log.Info("-----------------------------");
                ProcessProject(project.Key, project.Value, projectCounter);
                projectCounter++;
            }
            _log.Info("-----------------------------");
            _log.Info("Debridement complete!");

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
Пример #5
0
 public TwoFerSolution(ParsedSolution solution,
                       ClassDeclarationSyntax twoFerClass,
                       MethodDeclarationSyntax speakMethod,
                       ParameterSyntax speakMethodParameter,
                       ExpressionSyntax twoFerExpression,
                       VariableDeclaratorSyntax twoFerVariableDeclarator,
                       TwoFerError twoFerError) : base(solution.Solution, solution.SyntaxRoot)
 {
     _twoFerError         = twoFerError;
     TwoFerClass          = twoFerClass;
     SpeakMethod          = speakMethod;
     InputMethodParameter = speakMethodParameter;
     TwoFerExpression     = twoFerExpression;
     TwoFerVariable       = twoFerVariableDeclarator;
 }
Пример #6
0
 public GigasecondSolution(ParsedSolution solution,
                           MethodDeclarationSyntax addMethod,
                           ReturnType addMethodReturnType,
                           InvocationExpressionSyntax addSecondsInvocationExpression,
                           LocalDeclarationStatementSyntax addSecondsLocalArgument,
                           FieldDeclarationSyntax addSecondsFieldArgument,
                           ArgumentType addSecondsArgumentType,
                           GigasecondValueType gigasecondValueType) : base(solution.Solution, solution.SyntaxRoot)
 {
     _addMethod = addMethod;
     _addSecondsInvocationExpression = addSecondsInvocationExpression;
     _addSecondsLocalArgument        = addSecondsLocalArgument;
     _addSecondsFieldArgument        = addSecondsFieldArgument;
     _addSecondsArgumentType         = addSecondsArgumentType;
     _gigasecondValueType            = gigasecondValueType;
     _addMethodReturnType            = addMethodReturnType;
 }
        public static GigasecondSolution Parse(ParsedSolution solution)
        {
            var gigasecondClass                                     = solution.GigasecondClass();
            var addMethod                                           = gigasecondClass.AddMethod();
            var addMethodParameter                                  = addMethod.FirstParameter();
            var addMethodReturnedExpression                         = addMethod.ReturnedExpression();
            var addSecondsInvocationExpression                      = addMethod.AddSecondsInvocationExpression(addMethodParameter);
            var addSecondsArgumentExpression                        = addSecondsInvocationExpression.FirstArgumentExpression();
            var addSecondsArgumentVariable                          = gigasecondClass.ArgumentVariable(addSecondsArgumentExpression);
            var addSecondsArgumentVariableFieldDeclaration          = addSecondsArgumentVariable.FieldDeclaration();
            var addSecondsArgumentVariableLocalDeclarationStatement = addSecondsArgumentVariable.LocalDeclarationStatement();
            var addSecondsArgumentType                              = ArgumentDefinedAs(addSecondsArgumentVariableFieldDeclaration, addSecondsArgumentVariableLocalDeclarationStatement, addSecondsArgumentExpression);
            var addSecondsArgumentValueExpression                   = ArgumentValueExpression(addSecondsArgumentType, addSecondsArgumentExpression, addSecondsArgumentVariable);
            var addMethodReturnType                                 = ReturnedAs(addSecondsInvocationExpression, addMethodReturnedExpression, addMethodParameter);
            var addSecondsArgumentValueType                         = addSecondsArgumentValueExpression.GigasecondValueType();

            return(new GigasecondSolution(solution, addMethod, addMethodReturnType, addSecondsInvocationExpression, addSecondsArgumentVariableLocalDeclarationStatement, addSecondsArgumentVariableFieldDeclaration, addSecondsArgumentType, addSecondsArgumentValueType));
        }
Пример #8
0
        public static SolutionAnalysis Analyze(ParsedSolution parsedSolution)
        {
            if (parsedSolution.HasCompileErrors())
            {
                return(parsedSolution.DisapproveWithComment(SharedComments.FixCompileErrors));
            }

            if (parsedSolution.HasMainMethod())
            {
                return(parsedSolution.DisapproveWithComment(SharedComments.RemoveMainMethod));
            }

            if (parsedSolution.ThrowsNotImplementedException())
            {
                return(parsedSolution.DisapproveWithComment(SharedComments.RemoveThrowNotImplementedException));
            }

            if (parsedSolution.WritesToConsole())
            {
                return(parsedSolution.DisapproveWithComment(SharedComments.DontWriteToConsole));
            }

            return(null);
        }
Пример #9
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 Analyze(GigasecondSolutionParser.Parse(parsedSolution));
Пример #10
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 Analyze(new TwoFerSolution(parsedSolution));
Пример #11
0
 public LeapSolution(ParsedSolution solution) : base(solution.Solution, solution.SyntaxRoot)
 {
     IsLeapYearMethod   = solution.SyntaxRoot.GetClassMethod("Leap", "IsLeapYear");
     YearParameter      = IsLeapYearMethod.ParameterList?.Parameters.FirstOrDefault();
     ReturnedExpression = IsLeapYearMethod?.ReturnedExpression();
 }
Пример #12
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 Analyze(new GigasecondSolution(parsedSolution));
Пример #13
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 Analyze(new LeapSolution(parsedSolution));
 private static ClassDeclarationSyntax GigasecondClass(this ParsedSolution solution) =>
 solution.SyntaxRoot.GetClass("Gigasecond");
Пример #15
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 parsedSolution.ReferToMentor();
Пример #16
0
 public static SolutionAnalysis Analyze(ParsedSolution parsedSolution) =>
 Analyze(TwoFerSolutionParser.Parse(parsedSolution));
Пример #17
0
 private static bool ThrowsNotImplementedException(this ParsedSolution parsedSolution) =>
 parsedSolution.SyntaxRoot.ThrowsExceptionOfType <NotImplementedException>();
Пример #18
0
 private static bool HasMainMethod(this ParsedSolution parsedSolution) =>
 parsedSolution.SyntaxRoot.GetClassMethod("Program", "Main") != null;
Пример #19
0
 private static bool HasCompileErrors(this ParsedSolution parsedSolution) =>
 parsedSolution.SyntaxRoot.GetDiagnostics().Any(diagnostic => diagnostic.Severity == DiagnosticSeverity.Error);
Пример #20
0
 public GigasecondSolution(ParsedSolution solution) : base(solution.Solution, solution.SyntaxRoot)
 {
     AddMethod          = solution.SyntaxRoot.GetClassMethod("Gigasecond", "Add");
     BirthDateParameter = AddMethod?.ParameterList.Parameters.FirstOrDefault();
     ReturnedExpression = AddMethod?.ReturnedExpression();
 }