void AddMetadataReference_NoLock(MonoDevelopMetadataReference metadataReference, MonoDevelopWorkspace ws) { System.Diagnostics.Debug.Assert(Monitor.IsEntered(metadataReferences)); metadataReferences.Add(metadataReference); metadataReference.SnapshotUpdated += OnMetadataReferenceUpdated; }
bool RemoveMetadataReference_NoLock(MonoDevelopMetadataReference metadataReference, MonoDevelopWorkspace ws) { System.Diagnostics.Debug.Assert(Monitor.IsEntered(metadataReferences)); metadataReference.SnapshotUpdated -= OnMetadataReferenceUpdated; return(metadataReferences.Remove(metadataReference)); }
bool RemoveMetadataReference_NoLock(MonoDevelopMetadataReference metadataReference, MonoDevelopWorkspace ws) { System.Diagnostics.Debug.Assert(Monitor.IsEntered(ws.updatingProjectDataLock)); metadataReference.UpdatedOnDisk -= OnMetadataReferenceUpdated; return(metadataReferences.Remove(metadataReference)); }
void AddMetadataReference_NoLock(MonoDevelopMetadataReference metadataReference, MonoDevelopWorkspace ws) { System.Diagnostics.Debug.Assert(Monitor.IsEntered(ws.updatingProjectDataLock)); metadataReferences.Add(metadataReference); metadataReference.UpdatedOnDisk += OnMetadataReferenceUpdated; }
public MetadataReferenceUpdatedEventArgs(MonoDevelopMetadataReference reference) { OldSnapshot = reference.CurrentSnapshot; NewSnapshot = new Lazy <PortableExecutableReference> (() => { reference.UpdateSnapshot(); return(reference.CurrentSnapshot); }); }
static MonoDevelopMetadataReference GetOrCreate <TKey> (Dictionary <TKey, MonoDevelopMetadataReference> cache, TKey key, MonoDevelopMetadataReferenceManager provider, string path, MetadataReferenceProperties properties) { lock (cache) { if (!cache.TryGetValue(key, out var result)) { cache [key] = result = new MonoDevelopMetadataReference(provider, path, properties); } return(result); } }
Task <MetadataReferenceUpdatedEventArgs> WaitForSnapshotChange(MonoDevelopMetadataReference item) { var tcs = new TaskCompletionSource <MetadataReferenceUpdatedEventArgs> (); var cts = new CancellationTokenSource(); cts.Token.Register(() => tcs.TrySetCanceled()); item.SnapshotUpdated += (sender, args) => { // This routes through file service tcs.TrySetResult(args); }; // 1 minute should be enough. cts.CancelAfter(1000 * 60); return(tcs.Task); }
Task <bool> WaitForSnapshotChange(MonoDevelopMetadataReference item) { var tcs = new TaskCompletionSource <bool> (); var cts = new CancellationTokenSource(); cts.Token.Register(() => tcs.TrySetResult(false)); item.UpdatedOnDisk += (sender, args) => { // This routes through file service item.UpdateSnapshot(); tcs.TrySetResult(true); }; // 1 minute should be enough. cts.CancelAfter(1000 * 60); return(tcs.Task); }