// Omitting CommitAllDocuments causes races between caches and assembly resolver protected virtual void CreateOrUpdateData([NotNull] IT4File t4File) { Locks.ExecuteOrQueueEx("T4 assembly reference invalidation", () => { using var cookie = ReadLockCookie.Create(); PsiFiles.ExecuteAfterCommitAllDocuments(() => DoInvalidateAssemblies(t4File)); }); }
public void Execute(IDataContext context, DelegateExecute nextExecute) { using (ReadLockCookie.Create()) { PsiFiles.CommitAllDocuments(); ShowLocations(Tracker.EditLocations, Tracker.CurrentEdit, "Recent Edits", true); } }
/// <summary> /// Initializes a new instance of the <see cref="T4FileDataCache"/> class. /// </summary> /// <param name="lifetime">The lifetime of this class.</param> /// <param name="psiFiles">The PSI manager.</param> /// <param name="directiveInfoManager">An instance of <see cref="DirectiveInfoManager"/>.</param> public T4FileDataCache([NotNull] Lifetime lifetime, [NotNull] PsiFiles psiFiles, [NotNull] DirectiveInfoManager directiveInfoManager) { _directiveInfoManager = directiveInfoManager; _fileDataChanged = new Signal <Pair <IPsiSourceFile, T4FileDataDiff> >(lifetime, "T4FileDataCache.FileDataChanged"); lifetime.AddBracket( () => psiFiles.PsiFileCreated += OnPsiFileChanged, () => psiFiles.PsiFileCreated -= OnPsiFileChanged); lifetime.AddBracket( () => psiFiles.AfterPsiChanged += OnPsiChanged, () => psiFiles.AfterPsiChanged -= OnPsiChanged); lifetime.AddDispose(_fileDataBySourceFile); }
private void RegisterPsiChanged([NotNull] Lifetime lifetime, [NotNull] PsiFiles psiFiles) { lifetime.AddBracket( () => psiFiles.AfterPsiChanged += OnPsiChanged, () => psiFiles.AfterPsiChanged -= OnPsiChanged); }