Example #1
0
        public void Rename(CodeBulk codeBulk, SyntaxNode decl, string newName)
        {
            var docId      = code.CodeBulksAndDocumentsIds[codeBulk];
            var doc        = code.Solution.GetDocument(docId);
            var syntaxTree = doc.GetSyntaxTreeAsync().Result;
            var model      = code.Compilation.GetSemanticModel(syntaxTree);
            var locDecl    = syntaxTree.GetRoot().DescendantNodesAndSelf().First(n => n.IsEquivalentTo(decl));
            var symbol     = model.GetDeclaredSymbol(locDecl);

            var modifiedDocs = SymbolFinder
                               .FindReferencesAsync(symbol, code.Solution)
                               .Result
                               .SelectMany(r => r.Locations.Select(l => l.Document))
                               .ToList();

            modifiedDocs.Add(doc);

            var newSolution = Renamer.RenameSymbolAsync(code.Solution, symbol, newName, null).Result;

            foreach (var d in modifiedDocs)
            {
                var cb = code.CodeBulksAndDocumentsIds[d.Id];
                cb.Tree = newSolution.GetDocument(d.Id).GetSyntaxTreeAsync().Result;
            }

            code.SetSolution(newSolution);
        }
 public RemoveQuestCommand(Quest questToDelete, EditingContext context)
     : base(context)
 {
     quest    = questToDelete;
     node     = Context.Flow.Graph.FindNodeForQuest(quest);
     codeBulk = Context.Code.QuestsAndCodeBulks[quest];
 }
        public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
        {
            var linksReader = new LinksReader(code);

            linksReader.Visit(codeBulk);
            var links = linksReader.Results;

            foreach (var link in links)
            {
                var n1 = flow.Graph.FindNodeForQuest(link.Item1);
                var n2 = flow.Graph.FindNodeForQuest(link.Item2);

                if (n1 == null)
                {
                    throw new Exception($"Cannot find node for {link.Item1}");
                }

                if (n2 == null)
                {
                    throw new Exception($"Cannot find node for {link.Item2}");
                }

                flow.Graph.AddLink(n1, n2);
            }
            foreach (var notEditableQuest in linksReader.NotEditableResults)
            {
                var n = flow.Graph.FindNodeForQuest(notEditableQuest);
                n.Quest.Data.Ensure <NotEditableLinks>();
            }
        }
        public AddQuestCommand(Quest quest, Sector sector, EditingContext context)
            : base(context)
        {
            this.quest  = quest;
            this.sector = sector;

            codeBulk = CreateCode(quest, sector, Context);
        }
        public DeactivateQuestCommand(Quest quest, EditingContext context)
            : base(context)
        {
            this.quest = quest;

            activationDataClone = quest.Data.Ensure <ActivationData>().Clone();
            codeBulk            = Context.Code.QuestsAndCodeBulks[quest];
        }
        public void Visit(CodeBulk codeBulk)
        {
            CurrentCodeBulk = codeBulk;
            var doc = Code.GetMappedCode(codeBulk);

            Visit(doc.GetSyntaxRootAsync().Result);
            CurrentCodeBulk = null;
        }
Example #7
0
        public ISymbol GetSymbolFor(SyntaxNode node, CodeBulk containingCode)
        {
            var docId      = code.CodeBulksAndDocumentsIds[containingCode];
            var syntaxTree = code.Solution.GetDocument(docId).GetSyntaxTreeAsync().Result;
            var model      = code.Compilation.GetSemanticModel(syntaxTree);
            var locDecl    = syntaxTree.GetRoot().DescendantNodesAndSelf().First(n => n.IsEquivalentTo(node, topLevel: true));

            return(model.GetDeclaredSymbol(locDecl));
        }
Example #8
0
        public CodeSnapshot InsertAfter(SyntaxNode node, string annotation, CodeBulk codeBulk)
        {
            var res = new CodeSnapshot();

            res.PreviousCode[codeBulk] = codeBulk.Tree;

            var mark = codeBulk.Tree.GetRoot().GetAnnotatedNodes(annotation).Single();

            codeBulk.Tree = codeBulk.Tree.GetRoot().InsertNodesAfter(mark, new[] { node }).SyntaxTree;

            return(res);
        }
Example #9
0
        public CodeSnapshot RemoveNode(string annotation, CodeBulk codeBulk)
        {
            var res = new CodeSnapshot();

            res.PreviousCode[codeBulk] = codeBulk.Tree;

            var node = codeBulk.Tree.GetRoot().GetAnnotatedNodes(annotation).Single();

            codeBulk.Tree = codeBulk.Tree.GetRoot().RemoveNode(node, SyntaxRemoveOptions.KeepNoTrivia).SyntaxTree;

            return(res);
        }
Example #10
0
        public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
        {
            var sectorName = FromCodeTransformer.FetchSectorName(codeBulk.Tree);
            var sector     = new Sector {
                Name   = sectorName,
                Quests = new List <Quest>(),
            };

            flow.Sectors.Add(sector);

            code.SectorsAndCodeBulks[sector] = codeBulk;
        }
Example #11
0
        public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
        {
            var quest  = FromCodeTransformer.ReadQuest(codeBulk.Tree);
            var sector = flow.Sectors.FirstOrDefault(s => s.Name == quest.SectorName);

            if (sector == null)
            {
                throw new Exception($"Couldn't find sector by name {quest.SectorName}");
            }

            sector.Quests.Add(quest);
            flow.Graph.AddNode(quest);
            code.QuestsAndCodeBulks[quest] = codeBulk;
        }
Example #12
0
        public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
        {
            var classDecl = codeBulk.Tree.GetRoot().DescendantNodes().OfType <ClassDeclarationSyntax>().Last();
            var sym       = code.GetSymbolFor(classDecl, codeBulk);
            var visitor   = new QuestInitializationFinder(sym, code);

            foreach (var sectorCode in code.SectorsCode)
            {
                visitor.Visit(sectorCode);
            }

            var quest = code.QuestsAndCodeBulks[codeBulk];
            var data  = quest.Data.Ensure <ActivationData>();

            data.Sectors.AddRange(visitor.Results);
        }
        public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
        {
            var quest             = code.QuestsAndCodeBulks[codeBulk];
            var stateNameToMethod = codeBulk.Tree.GetAllStatesMethods();

            var nodesToAnnotatedNodes = new Dictionary <SyntaxNode, SyntaxNode>();

            foreach (var stateDesk in stateNameToMethod)
            {
                var state = quest.States.First(s => s.Name == stateDesk.Item1);
                var data  = state.Data.Ensure <QuestActionsData>();

                foreach (var statement in stateDesk.Item2.Body.Statements)
                {
                    var wasInitialized = false;
                    for (int i = 0; i < analyzers.Count && !wasInitialized; ++i)
                    {
                        var res = analyzers[i](statement);
                        if (res != null)
                        {
                            data.Actions.Add(res);
                            res.Source     = statement.ToString();
                            wasInitialized = true;
                            nodesToAnnotatedNodes[statement] = statement.WithAdditionalAnnotations(new SyntaxAnnotation(res.Id));
                        }
                    }
                    if (!wasInitialized)
                    {
                        var res = new QuestAction {
                            Type   = QuestActionType.NotParsed,
                            Source = statement.ToString(),
                        };
                        data.Actions.Add(res);
                        nodesToAnnotatedNodes[statement] = statement.WithAdditionalAnnotations(new SyntaxAnnotation(res.Id));
                    }
                }
            }

            var editor = new SyntaxEditor(codeBulk.Tree.GetRoot(), code.Solution.Workspace);

            foreach (var kv in nodesToAnnotatedNodes)
            {
                editor.ReplaceNode(kv.Key, kv.Value);
            }
            codeBulk.Tree        = editor.GetChangedRoot().SyntaxTree;
            codeBulk.WasModified = false;
        }
Example #14
0
 public abstract void Read(CodeBulk codeBulk, Code code, ref Flow flow);
Example #15
0
 public override void Read(CodeBulk codeBulk, Code code, ref Flow flow)
 {
 }