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));
            }
Ejemplo n.º 3
0
            bool RemoveMetadataReference_NoLock(MonoDevelopMetadataReference metadataReference, MonoDevelopWorkspace ws)
            {
                System.Diagnostics.Debug.Assert(Monitor.IsEntered(ws.updatingProjectDataLock));

                metadataReference.UpdatedOnDisk -= OnMetadataReferenceUpdated;
                return(metadataReferences.Remove(metadataReference));
            }
Ejemplo n.º 4
0
            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);
        }