コード例 #1
0
ファイル: CodeFile.cs プロジェクト: Michaelll123/Code2Xml
 public CodeFile(CstGenerator cstGenerator, FileInfo info)
 {
     Info           = info;
     Code           = GuessEncoding.ReadAllText(info.FullName);
     Ast            = cstGenerator.GenerateTreeFromCodeText(Code);
     Range2Elements = new Dictionary <CodeRange, CstNode>();
 }
コード例 #2
0
        public static IEnumerable <Tuple <int, LocationInfo> > GetSimilarElements(
            CstGenerator cstGenerator, IEnumerable <LocationInfo> locations,
            IEnumerable <FileInfo> targets,
            int range = 5, bool inner = true, bool outer = true)
        {
            var path2Ast = new Dictionary <string, CstNode>();
            var paths    = locations.Select(l => l.FileInfo).Concat(targets)
                           .Select(f => f.FullName)
                           .ToHashSet();

            foreach (var path in paths)
            {
                path2Ast.Add(path, cstGenerator.GenerateTreeFromCodePath(path));
            }

            var elements = new List <CstNode>();

            foreach (var location in locations)
            {
                var root = path2Ast[location.FileInfo.FullName];
                elements.Add(location.CodeRange.FindOutermostNode(root));
            }
            var names = AdoptNodeNames(elements);

            var candidates = new Dictionary <string, IEnumerable <CstNode> >();

            foreach (var keyAndValue in path2Ast)
            {
                candidates.Add(
                    keyAndValue.Key,
                    keyAndValue.Value.Descendants()
                    .Where(e => names.Contains(e.Name)));
            }
            var commonKeys = elements.GetCommonKeys(range, true, true);

            return(candidates.SelectMany(
                       kv => {
                var fileInfo = new FileInfo(kv.Key);
                return kv.Value.Select(
                    e => Tuple.Create(
                        e.GetSurroundingKeys(range, inner, outer)
                        .Count(commonKeys.Contains),
                        e))
                .Select(
                    t => Tuple.Create(
                        t.Item1, new LocationInfo {
                    FileInfo = fileInfo,
                    CodeRange = CodeRange.Locate(t.Item2),
                }));
            })
                   .OrderByDescending(t => t.Item1));
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: Michaelll123/Code2Xml
        private void MainForm_Load(object sender, EventArgs e)
        {
            var menuItems  = new List <ToolStripMenuItem>();
            var processors = new CstGenerator[] {
                CstGenerators.JavaUsingAntlr3,
                CstGenerators.CSharpUsingAntlr3,
                CstGenerators.JavaScriptUsingAntlr3,
                CstGenerators.Python2,
                CstGenerators.PhpUsingAntlr3,
                CstGenerators.LuaUsingAntlr3,
            };

            foreach (var processor in processors)
            {
                var menuItem =
                    menuItemLanguage.DropDownItems.Add(processor.LanguageNameWithVersion) as
                    ToolStripMenuItem;
                menuItems.Add(menuItem);
                var processorForClosure = processor;
                menuItem.Click += (o, args) => {
                    _activeProcessor = processorForClosure;
                    foreach (var item in menuItems)
                    {
                        item.Checked = false;
                    }
                    menuItem.Checked = true;

                    Code        = "";
                    _activeFile = null;
                    lvModifiableFile.Items.Clear();
                    lvFreezedFile.Items.Clear();
                    lvModifiableRule.Items.Clear();
                    lvFreezedRule.Items.Clear();
                    lvWillBeMarkedElements.Items.Clear();
                    lvMarkedElements.Items.Clear();
                };
                // Set default processor
                if (processor is JavaCstGeneratorUsingAntlr3)
                {
                    menuItem.PerformClick();
                }
            }
            InitializeModeMenu();
        }
コード例 #4
0
ファイル: CodeFile.cs プロジェクト: RainsSoft/Code2Xml
		public CodeFile(CstGenerator cstGenerator, FileInfo info) {
			Info = info;
			Code = GuessEncoding.ReadAllText(info.FullName);
			Ast = cstGenerator.GenerateTreeFromCodeText(Code);
			Range2Elements = new Dictionary<CodeRange, CstNode>();
		}
コード例 #5
0
 public MemoryCacheCstGenerator(CstGenerator delegatingCstGenerator)
         : base(delegatingCstGenerator.SupportedExtensions) {
     DelegatingCstGenerator = delegatingCstGenerator;
 }
コード例 #6
0
ファイル: MainForm.cs プロジェクト: RainsSoft/Code2Xml
        private void MainForm_Load(object sender, EventArgs e) {
            var menuItems = new List<ToolStripMenuItem>();
            var processors = new CstGenerator[] {
                CstGenerators.JavaUsingAntlr3,
                CstGenerators.CSharpUsingAntlr3,
                CstGenerators.JavaScriptUsingAntlr3,
                CstGenerators.Python2,
                CstGenerators.PhpUsingAntlr3,
                CstGenerators.LuaUsingAntlr3,
            };
            foreach (var processor in processors) {
                var menuItem =
                        menuItemLanguage.DropDownItems.Add(processor.LanguageNameWithVersion) as
                                ToolStripMenuItem;
                menuItems.Add(menuItem);
                var processorForClosure = processor;
                menuItem.Click += (o, args) => {
                    _activeProcessor = processorForClosure;
                    foreach (var item in menuItems) {
                        item.Checked = false;
                    }
                    menuItem.Checked = true;

                    Code = "";
                    _activeFile = null;
                    lvModifiableFile.Items.Clear();
                    lvFreezedFile.Items.Clear();
                    lvModifiableRule.Items.Clear();
                    lvFreezedRule.Items.Clear();
                    lvWillBeMarkedElements.Items.Clear();
                    lvMarkedElements.Items.Clear();
                };
                // Set default processor
                if (processor is JavaCstGeneratorUsingAntlr3) {
                    menuItem.PerformClick();
                }
            }
            InitializeModeMenu();
        }
コード例 #7
0
ファイル: Inference.cs プロジェクト: RainsSoft/Code2Xml
        public static IEnumerable<Tuple<int, LocationInfo>> GetSimilarElements(
                CstGenerator cstGenerator, IEnumerable<LocationInfo> locations,
                IEnumerable<FileInfo> targets,
                int range = 5, bool inner = true, bool outer = true) {
            var path2Ast = new Dictionary<string, CstNode>();
            var paths = locations.Select(l => l.FileInfo).Concat(targets)
                    .Select(f => f.FullName)
                    .ToHashSet();
            foreach (var path in paths) {
                path2Ast.Add(path, cstGenerator.GenerateTreeFromCodePath(path));
            }

            var elements = new List<CstNode>();
            foreach (var location in locations) {
                var root = path2Ast[location.FileInfo.FullName];
                elements.Add(location.CodeRange.FindOutermostNode(root));
            }
            var names = AdoptNodeNames(elements);

            var candidates = new Dictionary<string, IEnumerable<CstNode>>();
            foreach (var keyAndValue in path2Ast) {
                candidates.Add(
                        keyAndValue.Key,
                        keyAndValue.Value.Descendants()
                                .Where(e => names.Contains(e.Name)));
            }
            var commonKeys = elements.GetCommonKeys(range, true, true);
            return candidates.SelectMany(
                    kv => {
                        var fileInfo = new FileInfo(kv.Key);
                        return kv.Value.Select(
                                e => Tuple.Create(
                                        e.GetSurroundingKeys(range, inner, outer)
                                                .Count(commonKeys.Contains),
                                        e))
                                .Select(
                                        t => Tuple.Create(
                                                t.Item1, new LocationInfo {
                                                    FileInfo = fileInfo,
                                                    CodeRange = CodeRange.Locate(t.Item2),
                                                }));
                    })
                    .OrderByDescending(t => t.Item1);
        }