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; }
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)); }
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); }
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); }
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; }
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; }
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; }
public abstract void Read(CodeBulk codeBulk, Code code, ref Flow flow);
public override void Read(CodeBulk codeBulk, Code code, ref Flow flow) { }