public void Init()
        {
            patternsConverter  = new PatternConverter();
            patternsRepository = new MemoryPatternsRepository();
            sourceCodeRep      = new MemoryCodeRepository(
                "<?php \n" +
                "test_call_0();\n" +
                "test_call_1(a);\n" +
                "test_call_2(a, e);\n" +
                "test_call_3(c, d, a);\n" +
                "test_call_4(c, d, a, e);\n" +
                "\n" +
                "$password = a;\n" +
                "call_with_password_param(1, $password, 2);\n" +
                "\n" +
                "$password2 = \"1234\";\n" +
                "if ($password2->Length > 0) { }\n" +
                "test_call_5(1, $password2, 2);\n" +
                "$concat = \"111\" .\n" +
                "   \"222222222\"   .  \n" +
                "  \"333\";",

                "samples.php"
                );
            workflow = new Workflow(sourceCodeRep, patternsRepository)
            {
                Logger = new LoggerMessageCounter()
            };
        }
 public void Init()
 {
     patternsConverter = new PatternConverter(
         new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef)));
     patternsRep   = new MemoryPatternsRepository();
     sourceCodeRep = new MemoryCodeRepository(
         "<?php \n" +
         "test_call_0();\n" +
         "test_call_1(a);\n" +
         "test_call_2(a, e);\n" +
         "test_call_3(c, d, a);\n" +
         "test_call_4(c, d, a, e);\n" +
         "\n" +
         "$password = a;\n" +
         "call_with_password_param(1, $password, 2);\n" +
         "\n" +
         "$password2 = \"1234\";\n" +
         "if ($password2->Length > 0) { }\n" +
         "test_call_5(1, $password2, 2);"
         );
     workflow = new Workflow(sourceCodeRep, Language.Php, patternsRep)
     {
         Logger = new LoggerMessageCounter()
     };
 }
        public static MatchingResultDto[] GetMatchings(string code, string pattern, LanguageFlags analyzedLanguages,
                                                       LanguageFlags?patternLanguages = null)
        {
            var sourceCodeRep = new MemoryCodeRepository(code);
            var patternsRep   = new MemoryPatternsRepository();
            var workflow      = new Workflow(sourceCodeRep, analyzedLanguages, patternsRep)
            {
                Logger = new LoggerMessageCounter()
            };

            var processor   = new DslProcessor();
            var patternNode = (PatternNode)processor.Deserialize(pattern, patternLanguages ?? LanguageExt.AllPatternLanguages);
            var p           = new Pattern
            {
                Data      = patternNode,
                DebugInfo = pattern
            };
            var patternsConverter = new PatternConverter(
                new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef)));

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                p
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository)
                                                  .OrderBy(r => r.PatternKey)
                                                  .ToArray();

            return(matchingResults);
        }
Exemple #4
0
        public static MatchResultDto[] GetMatches(TextFile source, string pattern,
                                                  IEnumerable <Language> analyzedLanguages,
                                                  IEnumerable <Language> patternLanguages = null)
        {
            var sourceRep = new MemorySourceRepository(source.Data, source.FullName)
            {
                Languages = new HashSet <Language>(analyzedLanguages)
            };
            var patternsRep = new MemoryPatternsRepository();
            var logger      = new TestLogger();
            var workflow    = new Workflow(sourceRep, patternsRep)
            {
                Logger = logger
            };

            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new TextFile(pattern)
            {
                PatternKey = pattern
            });

            patternNode.Languages = new HashSet <Language>(patternLanguages ?? LanguageUtils.PatternLanguages);
            patternNode.DebugInfo = pattern;
            var patternsConverter = new PatternConverter();

            patternsRep.Add(patternsConverter.ConvertBack(new List <PatternRoot> {
                patternNode
            }));
            workflow.Process();
            MatchResultDto[] matchResults = logger.Matches.ToDto()
                                            .OrderBy(r => r.PatternKey)
                                            .ToArray();

            return(matchResults);
        }
Exemple #5
0
        public static MatchResultDto[] GetMatches(string code, string pattern,
                                                  IEnumerable <Language> analyzedLanguages,
                                                  IEnumerable <Language> patternLanguages = null)
        {
            var sourceCodeRep = new MemoryCodeRepository(code)
            {
                Languages = new HashSet <Language>(analyzedLanguages)
            };
            var patternsRep = new MemoryPatternsRepository();
            var workflow    = new Workflow(sourceCodeRep, patternsRep)
            {
                Logger = new LoggerMessageCounter()
            };

            var         processor   = new DslProcessor();
            PatternRoot patternNode = processor.Deserialize(new CodeFile(pattern)
            {
                IsPattern = true
            });

            patternNode.Languages = new HashSet <Language>(patternLanguages ?? LanguageUtils.PatternLanguages.Values);
            patternNode.DebugInfo = pattern;
            var patternsConverter = new PatternConverter();

            patternsRep.Add(patternsConverter.ConvertBack(new List <PatternRoot>()
            {
                patternNode
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchResultDto[] matchResults = workflowResult.MatchResults.ToDto()
                                            .OrderBy(r => r.PatternKey)
                                            .ToArray();

            return(matchResults);
        }
Exemple #6
0
 public void Init()
 {
     patternsConverter  = new PatternConverter();
     patternsRepository = new MemoryPatternsRepository();
     sourceRep          = new FileSourceRepository(Path.Combine(TestUtility.TestsDataPath, "common-matching.php"));
 }
        internal void UpdateMatchings()
        {
            sourceCodeLogger.Clear();

            var sourceCodeRep = new MemoryCodeRepository(sourceCodeTextBox.Text);
            IPatternsRepository patternRepository;

            if (!string.IsNullOrEmpty(ServiceLocator.PatternViewModel.Value))
            {
                patternRepository = new DslPatternRepository(ServiceLocator.PatternViewModel.Value, ServiceLocator.PatternViewModel.Languages);
            }
            else
            {
                patternRepository = new MemoryPatternsRepository();
            }
            var workflow = new Workflow(sourceCodeRep, SelectedLanguage, patternRepository, stage: Stage);

            workflow.IsIncludeIntermediateResult = true;
            workflow.Logger = sourceCodeLogger;
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults
                                                  .ToDto(workflow.SourceCodeRepository)
                                                  .ToArray();

            if (IsDeveloperMode)
            {
                AntlrParseTree antlrParseTree = workflowResult.ParseTrees.FirstOrDefault() as AntlrParseTree;
                if (antlrParseTree != null && antlrParseTree.SyntaxTree != null)
                {
                    Antlr4.Runtime.Parser antlrParser = (workflow.ParserConverterSets[antlrParseTree.SourceLanguage].Parser as AntlrParser).Parser;
                    string tokensString = AntlrHelper.GetTokensString(antlrParseTree.Tokens, antlrParser.Vocabulary, onlyDefaultChannel: true);
                    string treeString   = antlrParseTree.SyntaxTree.ToStringTreeIndented(antlrParser);

                    Tokens    = tokensString;
                    ParseTree = treeString;
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "Tokens.txt"), Tokens);
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "Tree.txt"), ParseTree);
                }
                if (Stage >= Stage.Convert && workflowResult.Usts.FirstOrDefault() != null)
                {
                    UstJson = jsonSerializer.Serialize(workflowResult.Usts.FirstOrDefault().Root);
                    File.WriteAllText(Path.Combine(ServiceLocator.TempDirectory, "UST.json"), UstJson);
                }
            }

            MatchingResultText = "MATCHINGS";
            if (matchingResults.Count() > 0)
            {
                MatchingResultText += " (" + matchingResults.Count() + ")";
            }

            if (sourceCodeLogger.ErrorCount == 0)
            {
                SourceCodeErrorsIsVisible = false;
                SourceCodeErrorsText      = "ERRORS";
            }
            else
            {
                SourceCodeErrorsIsVisible = true;
                SourceCodeErrorsText      = $"ERRORS ({sourceCodeLogger.ErrorCount})";
            }

            Dispatcher.UIThread.InvokeAsync(() =>
            {
                MatchingResults.Clear();
                foreach (var matchingResult in matchingResults)
                {
                    MatchingResults.Add(new MathingResultDtoWrapper(matchingResult));
                }
                this.RaisePropertyChanged(nameof(Tokens));
                this.RaisePropertyChanged(nameof(ParseTree));
                this.RaisePropertyChanged(nameof(UstJson));
                this.RaisePropertyChanged(nameof(MatchingResultText));
                this.RaisePropertyChanged(nameof(SourceCodeErrorsIsVisible));
                this.RaisePropertyChanged(nameof(SourceCodeErrorsText));
            });
        }
        public static IPatternsRepository CreatePatternsRepository(string patternsString,
                                                                   IEnumerable <string> patternIds,
                                                                   ILogger logger)
        {
            IPatternsRepository patternsRepository;

            if (string.IsNullOrEmpty(patternsString) || patternsString == "default")
            {
                patternsRepository = new DefaultPatternRepository();
            }
            else if (patternsString.EqualsIgnoreCase("no"))
            {
                patternsRepository = DummyPatternsRepository.Instance;
            }
            else if (patternsString.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
            {
                patternsRepository = new JsonPatternsRepository(FileExt.ReadAllText(patternsString));
            }
            else
            {
                TextFile patternsFile;
                if (patternsString.EndsWith(".pattern", StringComparison.OrdinalIgnoreCase))
                {
                    patternsFile = new TextFile(FileExt.ReadAllText(patternsString))
                    {
                        PatternKey = patternsString,
                        Name       = patternsString
                    };
                }
                else
                {
                    patternsFile = new TextFile(patternsString);
                }

                var processor = new DslProcessor();
                if (logger != null)
                {
                    processor.Logger = logger;
                }

                PatternRoot patternRoot      = processor.Deserialize(patternsFile);
                var         patternConverter = new PatternConverter();
                if (logger != null)
                {
                    patternConverter.Logger = logger;
                }

                List <PatternDto> dtos = patternConverter.ConvertBack(new[] { patternRoot });

                var memoryPatternsRepository = new MemoryPatternsRepository();
                memoryPatternsRepository.Add(dtos);

                patternsRepository = memoryPatternsRepository;
            }

            if (logger != null)
            {
                patternsRepository.Logger = logger;
            }

            patternsRepository.Identifiers = patternIds as List <string> ?? patternIds?.ToList();

            return(patternsRepository);
        }