diff options
Diffstat (limited to 'main/src/core')
42 files changed, 179 insertions, 181 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessHostController.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessHostController.cs index 536d9c3dd4..5b6df84f51 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessHostController.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessHostController.cs @@ -131,7 +131,7 @@ namespace MonoDevelop.Core.Execution cmd.DebugMode = isDebugMode; OperationConsole cons = console ?? new ProcessHostConsole (); var p = process = executionHandlerFactory.Execute (cmd, cons); - Counters.ExternalHostProcesses++; + Counters.ExternalHostProcesses.Inc (1); process.Task.ContinueWith ((t) => ProcessExited (p)); @@ -159,8 +159,8 @@ namespace MonoDevelop.Core.Execution { lock (this) { - Counters.ExternalHostProcesses--; - + Counters.ExternalHostProcesses.Dec (1); + // Remove all callbacks from existing objects foreach (object ob in remoteObjects) RemotingService.UnregisterMethodCallback (ob, "Dispose"); @@ -204,7 +204,7 @@ namespace MonoDevelop.Core.Execution RemotingService.RegisterMethodCallback (obj, "Dispose", RemoteProcessObjectDisposing, null); RemotingService.RegisterMethodCallback (obj, "Shutdown", RemoteProcessObjectShuttingDown, null); remoteObjects.Add (obj); - Counters.ExternalObjects++; + Counters.ExternalObjects.Inc (1); return obj; } catch { ReleaseInstance (null); @@ -234,7 +234,7 @@ namespace MonoDevelop.Core.Execution RemotingService.RegisterMethodCallback (obj, "Dispose", RemoteProcessObjectDisposing, null); RemotingService.RegisterMethodCallback (obj, "Shutdown", RemoteProcessObjectShuttingDown, null); remoteObjects.Add (obj); - Counters.ExternalObjects++; + Counters.ExternalObjects.Inc (1); return obj; } catch { ReleaseInstance (null); @@ -272,7 +272,7 @@ namespace MonoDevelop.Core.Execution public void ReleaseInstance (object proc, int shutdownTimeout) { - Counters.ExternalObjects--; + Counters.ExternalObjects.Dec (1); if (processHost == null) return; diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs index ca6db5972a..6e39a2368d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessService.cs @@ -156,7 +156,7 @@ namespace MonoDevelop.Core.Execution // p.Exited += exited; // p.EnableRaisingEvents = true; - Counters.ProcessesStarted++; + Counters.ProcessesStarted.Inc (1); p.Start (); if (exited != null) @@ -212,7 +212,7 @@ namespace MonoDevelop.Core.Execution if (p != null) { if (exited != null) p.Task.ContinueWith (t => exited (p, EventArgs.Empty), Runtime.MainTaskScheduler); - Counters.ProcessesStarted++; + Counters.ProcessesStarted.Inc (1); return p; } else { LoggingService.LogError ("Could not create external console for command: " + command + " " + arguments); diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessWrapper.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessWrapper.cs index f6d15c43bf..635c056507 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessWrapper.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ProcessWrapper.cs @@ -44,11 +44,11 @@ namespace MonoDevelop.Core.Execution // We need these wrappers, as the alternatives are not good enough. // OutputDataReceived does not persist newlines. if (OutputStreamChanged != null) { - Task.Run (CaptureOutput, cs.Token); + Task.Run (CaptureOutput, cs.Token).Ignore (); } if (ErrorStreamChanged != null) { - Task.Run (CaptureError, cs.Token); + Task.Run (CaptureError, cs.Token).Ignore (); } operation = new ProcessAsyncOperation (Task, cs) { diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/FileService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/FileService.cs index 4158d36ccf..4aca642c0a 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/FileService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/FileService.cs @@ -805,9 +805,9 @@ namespace MonoDevelop.Core { foreach (FileEventInfo fi in args) { if (fi.IsDirectory) - Counters.DirectoriesCreated++; + Counters.DirectoriesCreated.Inc (1); else - Counters.FilesCreated++; + Counters.FilesCreated.Inc (1); } eventQueue.RaiseEvent (EventDataKind.Created, args); @@ -830,9 +830,9 @@ namespace MonoDevelop.Core { foreach (FileEventInfo fi in args) { if (fi.IsDirectory) - Counters.DirectoriesRenamed++; + Counters.DirectoriesRenamed.Inc (1); else - Counters.FilesRenamed++; + Counters.FilesRenamed.Inc (1); } eventQueue.RaiseEvent (EventDataKind.Renamed, args); @@ -843,9 +843,9 @@ namespace MonoDevelop.Core { foreach (FileEventInfo fi in args) { if (fi.IsDirectory) - Counters.DirectoriesRemoved++; + Counters.DirectoriesRemoved.Inc (1); else - Counters.FilesRemoved++; + Counters.FilesRemoved.Inc (1); } eventQueue.RaiseEvent (EventDataKind.Removed, args); @@ -854,7 +854,7 @@ namespace MonoDevelop.Core public static event EventHandler<FileEventArgs> FileChanged; static void OnFileChanged (FileEventArgs args) { - Counters.FileChangeNotifications++; + Counters.FileChangeNotifications.Inc (1); eventQueue.RaiseEvent (EventDataKind.Changed, args); } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/IProgressMonitor.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/IProgressMonitor.cs index 8f728d8422..b1a4aa1853 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core/IProgressMonitor.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core/IProgressMonitor.cs @@ -44,11 +44,11 @@ namespace MonoDevelop.Core public class AsyncOperation { - public static AsyncOperation CompleteOperation = new AsyncOperation (Task.FromResult(0), null); + public static AsyncOperation CompleteOperation = new AsyncOperation (Task.CompletedTask, null); protected AsyncOperation () { - Task = Task.FromResult (0); + Task = Task.CompletedTask; CancellationTokenSource = new CancellationTokenSource (); } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs index 4bb348eddc..e506fd1cd4 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/CompiledAssemblyProject.cs @@ -201,7 +201,7 @@ namespace MonoDevelop.Projects internal protected override Task OnSave (ProgressMonitor monitor) { // Compiled assemblies can't be saved - return Task.FromResult (0); + return Task.CompletedTask; } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ConditionedPropertyCollection.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ConditionedPropertyCollection.cs index ec1c010046..bd43f395e7 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ConditionedPropertyCollection.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ConditionedPropertyCollection.cs @@ -33,8 +33,8 @@ namespace MonoDevelop.Projects { public class ConditionedPropertyCollection { - Dictionary<string, ImmutableList<string>> props = new Dictionary<string, ImmutableList<string>> (); - Dictionary<KeySet, ImmutableList<ValueSet>> combinedProps = new Dictionary<KeySet, ImmutableList<ValueSet>> (StructEqualityComparer<KeySet>.Instance); + Dictionary<string, ImmutableArray<string>> props = new Dictionary<string, ImmutableArray<string>> (); + Dictionary<KeySet, ImmutableArray<ValueSet>> combinedProps = new Dictionary<KeySet, ImmutableArray<ValueSet>> (StructEqualityComparer<KeySet>.Instance); /// <summary> /// A set of strings, which can be compared to other sets ignoring the order. @@ -178,14 +178,14 @@ namespace MonoDevelop.Projects foreach (var e in other.props) { var otherList = e.Value; var key = e.Key; - ImmutableList<string> list; + ImmutableArray<string> list; if (props.TryGetValue (key, out list)) { var lb = list.ToBuilder (); foreach (var c in otherList) { if (!lb.Contains (c)) lb.Add (c); } - props [key] = lb.ToImmutableList (); + props [key] = lb.ToImmutable (); } else props [key] = otherList; } @@ -193,7 +193,7 @@ namespace MonoDevelop.Projects foreach (var e in other.combinedProps) { var otherList = e.Value; var key = e.Key; - ImmutableList<ValueSet> thisList; + ImmutableArray<ValueSet> thisList; if (combinedProps.TryGetValue (key, out thisList)) { var list = thisList.ToBuilder (); foreach (var c in otherList) { @@ -210,13 +210,13 @@ namespace MonoDevelop.Projects internal void AddPropertyValues (IList<string> names, IList<string> values) { var key = new KeySet (names); - ImmutableList<ValueSet> list; + ImmutableArray<ValueSet> list; ValueSet valueSet; // First register the combination of values if (!combinedProps.TryGetValue (key, out list)) { - list = ImmutableList<ValueSet>.Empty; + list = ImmutableArray<ValueSet>.Empty; valueSet = new ValueSet (names, names, values); } else { // If there is already a list, there must be at least one item. @@ -229,12 +229,12 @@ namespace MonoDevelop.Projects // Now register each value individually - ImmutableList<string> valList; + ImmutableArray<string> valList; for (int n = 0; n < names.Count; n++) { var name = names [n]; var val = values [n]; if (!props.TryGetValue (name, out valList)) - valList = ImmutableList<string>.Empty; + valList = ImmutableArray<string>.Empty; if (!valList.Contains (val)) props[name] = valList.Add (val); } @@ -252,12 +252,12 @@ namespace MonoDevelop.Projects /// <summary> /// Gets the values used in conditions for the given property /// </summary> - public ImmutableList<string> GetAllPropertyValues (string property) + public ImmutableArray<string> GetAllPropertyValues (string property) { - ImmutableList<string> list; + ImmutableArray<string> list; if (props.TryGetValue (property, out list)) return list; - return ImmutableList<string>.Empty; + return ImmutableArray<string>.Empty; } /// <summary> @@ -266,12 +266,12 @@ namespace MonoDevelop.Projects /// Platform, it will return values for those properties specified in conditions that reference both /// Configuration and Platform. /// </summary> - public ImmutableList<ValueSet> GetCombinedPropertyValues (params string[] properties) + public ImmutableArray<ValueSet> GetCombinedPropertyValues (params string[] properties) { - ImmutableList<ValueSet> list; + ImmutableArray<ValueSet> list; if (combinedProps.TryGetValue (new KeySet (properties), out list)) return list; - return ImmutableList<ValueSet>.Empty; + return ImmutableArray<ValueSet>.Empty; } } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/FileWatcherService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/FileWatcherService.cs index c2bf45fd01..b438d3e13d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/FileWatcherService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/FileWatcherService.cs @@ -585,7 +585,8 @@ namespace MonoDevelop.Projects // the original file still exists.
if (File.Exists (e.OldFullPath))
FileService.NotifyFileChanged (e.OldFullPath);
- else
+ // Handle odd file watcher events which look like a folder being renamed to a file.
+ else if (!Directory.Exists (e.OldFullPath))
FileService.NotifyFileRemoved (e.OldFullPath);
}
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs index fcd55fd427..deb72f980d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Project.cs @@ -2433,9 +2433,9 @@ namespace MonoDevelop.Projects ProjectConfiguration config = GetConfiguration (configuration) as ProjectConfiguration; if (config == null) monitor.ReportError (GettextCatalog.GetString ("Configuration '{0}' not found in project '{1}'", configuration, Name), null); - return Task.FromResult (0); + return Task.CompletedTask; } - + /// <summary> /// Gets the absolute path to the output file generated by this project. /// </summary> @@ -2971,7 +2971,7 @@ namespace MonoDevelop.Projects // Now add configurations for which a platform has not been specified, but only if no other configuration // exists with the same name. Combine them with individually specified platforms, if available foreach (var c in confValues.Select (v => v.GetValue ("Configuration"))) { - if (platValues.Count > 0) { + if (platValues.Length > 0) { foreach (var plat in platValues.Select (v => v.GetValue ("Platform"))) { var ep = plat == "AnyCPU" ? "" : plat; if (!configData.Any (cd => cd.Config == c && cd.Platform == ep)) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SdkProjectReader.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SdkProjectReader.cs index 2d42a1576f..3a5273948a 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SdkProjectReader.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SdkProjectReader.cs @@ -65,7 +65,8 @@ namespace MonoDevelop.Projects // 2) An Sdk node as a child of the Project node // 3) An Sdk attribute on any Import node var document = new XmlDocument (); - document.Load (new StreamReader (file)); + using (var sr = new StreamReader (file)) + document.Load (sr); XmlNode projectNode = document.SelectSingleNode ("/Project"); if (projectNode != null) { XmlAttribute sdkAttr = projectNode.Attributes ["Sdk"]; diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs index 4e87f0af31..5986e425e5 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/Solution.cs @@ -80,7 +80,7 @@ namespace MonoDevelop.Projects internal Solution (bool loading) { loadingFromConstructor = loading; - Counters.SolutionsLoaded++; + Counters.SolutionsLoaded.Inc (1); configurations = new SolutionConfigurationCollection (this); runConfigurations = new MultiItemSolutionRunConfigurationCollection (this); format = MSBuildFileFormat.DefaultFormat; @@ -592,7 +592,7 @@ namespace MonoDevelop.Projects // Dispose the root folder after we dispose the base item, as we need the root folder // to contain the items when unregistering from the file watcher service. RootFolder.Dispose (); - Counters.SolutionsLoaded--; + Counters.SolutionsLoaded.Dec (1); } internal bool IsSolutionItemEnabled (string solutionItemPath) @@ -925,7 +925,7 @@ namespace MonoDevelop.Projects /*protected virtual*/ Task OnPrepareExecution (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration, SolutionRunConfiguration runConfiguration) { - return Task.FromResult (0); + return Task.CompletedTask; } /*protected virtual*/ void OnStartupItemChanged(EventArgs e) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolder.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolder.cs index 725a7b2cf3..0047fd2b8d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolder.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolder.cs @@ -399,7 +399,7 @@ namespace MonoDevelop.Projects public Task Execute (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) { - return Task.FromResult (false); + return Task.CompletedTask; } public bool CanExecute (ExecutionContext context, ConfigurationSelector configuration) @@ -409,7 +409,7 @@ namespace MonoDevelop.Projects public Task PrepareExecution (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) { - return Task.FromResult (false); + return Task.CompletedTask; } // note: although executing folders isn't supported, this may still get called when diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs index d3296fdee1..1cb0bdf6bc 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionItem.cs @@ -85,7 +85,7 @@ namespace MonoDevelop.Projects configurations = new SolutionItemConfigurationCollection (this); configurations.ConfigurationAdded += OnConfigurationAddedToCollection; configurations.ConfigurationRemoved += OnConfigurationRemovedFromCollection; - Counters.ItemsLoaded++; + Counters.ItemsLoaded.Inc (1); fileStatusTracker = new FileStatusTracker<SolutionItemEventArgs> (this, OnReloadRequired, new SolutionItemEventArgs (this)); } @@ -123,7 +123,7 @@ namespace MonoDevelop.Projects fileStatusTracker.Dispose (); base.OnDispose (); - Counters.ItemsLoaded--; + Counters.ItemsLoaded.Dec (1); // items = null; // wildcardItems = null; @@ -1080,7 +1080,7 @@ namespace MonoDevelop.Projects [Obsolete ("Use overload that takes a RunConfiguration")] protected virtual Task OnExecute (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) { - return Task.FromResult (0); + return Task.CompletedTask; } /// <summary> @@ -1105,7 +1105,7 @@ namespace MonoDevelop.Projects [Obsolete ("Use overload that takes a RunConfiguration")] protected virtual Task OnPrepareExecution (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) { - return Task.FromResult (true); + return Task.CompletedTask; } bool DoGetCanExecute (ExecutionContext context, ConfigurationSelector configuration, SolutionItemRunConfiguration runConfiguration) diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/UnknownSolutionItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/UnknownSolutionItem.cs index e718d5e03c..e89aa6476e 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/UnknownSolutionItem.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/UnknownSolutionItem.cs @@ -101,7 +101,7 @@ namespace MonoDevelop.Projects protected internal override Task OnSave (ProgressMonitor monitor) { - return Task.FromResult (0); + return Task.CompletedTask; } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs index dafbe867f6..2927163932 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/WorkspaceItem.cs @@ -280,7 +280,7 @@ namespace MonoDevelop.Projects protected internal virtual Task OnSave (ProgressMonitor monitor) { - return Task.FromResult (0); + return Task.CompletedTask; } public virtual bool NeedsReload { @@ -330,7 +330,7 @@ namespace MonoDevelop.Projects { Loading = false; fileStatusTracker.ResetLoadTimes (); - return Task.FromResult (true); + return Task.CompletedTask; } /// <summary> diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/CommandSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/CommandSearchCategory.cs index 4f6e636415..eacb97fb2d 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/CommandSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/CommandSearchCategory.cs @@ -64,18 +64,8 @@ namespace MonoDevelop.Components.MainToolbar sortOrder = CommandCategoryOrder; } - readonly string[] validTags = { "cmd", "command", "c" }; - - public override string [] Tags { - get { - return validTags; - } - } - - public override bool IsValidTag (string tag) - { - return validTags.Any (t => t == tag); - } + public override string [] Tags { get; } = { "cmd", "command", "c" }; + public override bool IsValidTag (string tag) => Array.IndexOf (Tags, tag) >= 0; public override Task GetResults (ISearchResultCallback searchResultCallback, SearchPopupSearchPattern pattern, CancellationToken token) { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs index 76e923f2ac..9c8875a4d6 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/FileSearchCategory.cs @@ -86,18 +86,8 @@ namespace MonoDevelop.Components.MainToolbar return list; } - string [] validTags = new [] { "file", "f" }; - - public override string [] Tags { - get { - return validTags; - } - } - - public override bool IsValidTag (string tag) - { - return validTags.Any (t => t == tag); - } + public override string [] Tags { get; } = { "file", "f" }; + public override bool IsValidTag (string tag) => Array.IndexOf (Tags, tag) >= 0; static List<Tuple<string, string, ProjectFile>> allFilesCache; static SemaphoreSlim allFilesLock = new SemaphoreSlim (1, 1); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs index c73b1972b1..959db38cb8 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs @@ -575,6 +575,7 @@ namespace MonoDevelop.Components.MainToolbar currentSolution.StartupConfigurationChanged -= HandleStartupItemChanged; currentSolution.Saved -= HandleSolutionSaved; currentSolution.EntrySaved -= HandleSolutionEntrySaved; + currentSolution.SolutionItemAdded -= HandleSolutionItemAdded; } currentSolution = e.Solution; @@ -583,6 +584,7 @@ namespace MonoDevelop.Components.MainToolbar currentSolution.StartupConfigurationChanged += HandleStartupItemChanged; currentSolution.Saved += HandleSolutionSaved; currentSolution.EntrySaved += HandleSolutionEntrySaved; + currentSolution.SolutionItemAdded += HandleSolutionItemAdded; } TrackStartupProject (); @@ -625,6 +627,14 @@ namespace MonoDevelop.Components.MainToolbar HandleSolutionSaved (sender, e); } + void HandleSolutionItemAdded (object sender, SolutionItemChangeEventArgs e) + { + // When a solution item is added due to a reload we need to ensure the configurationMergers dictionary is + // using the new project and not the old disposed project. + if (e.Reloading) + UpdateCombos (); + } + void HandleStartupItemChanged (object sender, EventArgs e) { TrackStartupProject (); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/RoslynSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/RoslynSearchCategory.cs index 4bbded7af5..c34ef49227 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/RoslynSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/RoslynSearchCategory.cs @@ -56,23 +56,14 @@ namespace MonoDevelop.Components.MainToolbar sortOrder = FirstCategoryOrder;
}
- static readonly string [] tags = new [] {
+ public override string [] Tags { get; } = new [] {
// Types
"type", "t", "class", "struct", "interface", "enum", "delegate",
// Members
"member", "m", "method", "property", "field", "event"
- };
-
- public override string [] Tags {
- get {
- return tags;
- }
- }
-
- public override bool IsValidTag (string tag)
- {
- return tags.Contains (tag);
- }
+ }; + + public override bool IsValidTag (string tag) => Array.IndexOf (Tags, tag) >= 0;
static readonly IImmutableSet<string> typeKinds = ImmutableHashSet.Create (
NavigateToItemKind.Class,
@@ -154,7 +145,7 @@ namespace MonoDevelop.Components.MainToolbar if (string.IsNullOrEmpty (searchPattern.Pattern))
return Task.CompletedTask;
- if (searchPattern.Tag != null && !tags.Contains (searchPattern.Tag) || searchPattern.HasLineNumber)
+ if (searchPattern.Tag != null && Array.IndexOf (Tags, searchPattern.Tag) < 0 || searchPattern.HasLineNumber)
return Task.CompletedTask;
return Task.Run (async delegate {
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs index d3d6474915..ec317bad20 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/SearchInSolutionSearchCategory.cs @@ -59,18 +59,9 @@ namespace MonoDevelop.Components.MainToolbar // return (ISearchDataSource)new SearchInSolutionDataSource (searchPattern); // }); //} - static readonly string[] tags = { "search" }; + public override string [] Tags { get; } = { "search" }; - public override string[] Tags { - get { - return tags; - } - } - - public override bool IsValidTag (string tag) - { - return tag == "search"; - } + public override bool IsValidTag (string tag) => tag == "search"; class SearchInSolutionSearchResult : SearchResult { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs index ff00434baf..b773ca4a4e 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.BuildOutputView/BuildOutputViewContent.cs @@ -60,7 +60,7 @@ namespace MonoDevelop.Ide.BuildOutputView { this.buildOutput = buildOutput; DocumentTitle = $"{GettextCatalog.GetString ("Build Output")} {DateTime.Now.ToString ("h:mm tt yyyy-MM-dd")}.binlog"; - Counters.OpenedFromIDE++; + Counters.OpenedFromIDE.Inc (1); } protected override async Task OnInitialize (ModelDescriptor modelDescriptor, Properties status) @@ -70,7 +70,7 @@ namespace MonoDevelop.Ide.BuildOutputView if (modelDescriptor is FileDescriptor file) { FilePath = file.FilePath; loadedFromFile = true; - Counters.OpenedFromFile++; + Counters.OpenedFromFile.Inc (1); } } @@ -206,7 +206,7 @@ namespace MonoDevelop.Ide.BuildOutputView [CommandHandler (FileCommands.Save)] protected override Task OnSave () { - Counters.SavedToFile++; + Counters.SavedToFile.Inc (1); return control.SaveAs (); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadCodon.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadCodon.cs index 27a2ee4598..77a8ba0e26 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadCodon.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/PadCodon.cs @@ -135,7 +135,7 @@ namespace MonoDevelop.Ide.Codons protected virtual PadContent CreatePad () { - Counters.PadsLoaded++; + Counters.PadsLoaded.Inc (1); return (PadContent) Addin.CreateInstance (ClassName, true); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Desktop/PlatformService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Desktop/PlatformService.cs index 2ecb25f055..47c7c983c9 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Desktop/PlatformService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Desktop/PlatformService.cs @@ -513,6 +513,8 @@ namespace MonoDevelop.Ide.Desktop public static bool AccessibilityKeyboardFocusInUse { get; protected set; } + internal virtual void MakeAccessibilityAnnouncement (string text) { } + internal virtual string GetNativeRuntimeDescription () { return null; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/AutoSave.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/AutoSave.cs index 5d5adc3915..ad93550190 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/AutoSave.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/AutoSave.cs @@ -111,7 +111,7 @@ namespace MonoDevelop.Ide.Editor if (File.Exists (autosaveFileName)) File.Delete (autosaveFileName); content.WriteTextTo (autosaveFileName); - Counters.AutoSavedFiles++; + Counters.AutoSavedFiles.Inc (1); } catch (Exception e) { LoggingService.LogError ("Error in auto save while creating: " + fileName +". Disableing auto save.", e); DisableAutoSave (); @@ -158,20 +158,20 @@ namespace MonoDevelop.Ide.Editor } } } - static Task finishedTask = Task.FromResult (true); + internal static Task InformAutoSaveThread (ITextSource content, string fileName, bool isDirty) { if (content == null) throw new ArgumentNullException (nameof (content)); if (!autoSaveEnabled || string.IsNullOrEmpty (fileName)) - return finishedTask; + return Task.CompletedTask; if (isDirty) { return Task.Run (() => { CreateAutoSave (fileName, content); }); } else { RemoveAutoSaveFile (fileName); - return finishedTask; + return Task.CompletedTask; } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs index cc9805e70f..53745babf6 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/DefaultSourceEditorOptions.cs @@ -333,7 +333,7 @@ namespace MonoDevelop.Ide.Editor private Task UpdateContextOptions (object sender, CodingConventionsChangedEventArgs arg) { if (context == null) - return Task.FromResult (false); + return Task.CompletedTask; bool followCodingConventions = IdeApp.Preferences.Editor.FollowCodingConventions; @@ -368,7 +368,7 @@ namespace MonoDevelop.Ide.Editor } } this.FireChange (); - return Task.FromResult (true); + return Task.CompletedTask; } #region new options diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/VersionInformationTabPage.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/VersionInformationTabPage.cs index 13b54f8d59..d766d37830 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/VersionInformationTabPage.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Dialogs/VersionInformationTabPage.cs @@ -105,7 +105,7 @@ namespace MonoDevelop.Ide.Gui.Dialogs contentBox.BorderWidth = 4; contentBox.PackStart (buf, false, false, 0); - var asmButton = new Gtk.Button ("Show loaded assemblies"); + var asmButton = new Gtk.Button (GettextCatalog.GetString ("Show loaded assemblies")); asmButton.Clicked += (sender, e) => { asmButton.Hide (); contentBox.PackStart (CreateAssembliesTable (), false, false, 0); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs index d7cb48b503..4fe44f4e70 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFileNodeBuilder.cs @@ -366,19 +366,22 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad folderFile.Subtype = Subtype.Directory; project.Files.Add (folderFile); } - var children = FileNestingService.GetDependentOrNestedTree (file); if (children != null) { foreach (var child in children.ToArray ()) { - project.Files.Remove (child); - if(delete) + // Delete file before removing them from the project to avoid Remove items being added + // if the project is currently being saved in memory or to disk. + if (delete) FileService.DeleteFile (child.Name); + project.Files.Remove (child); } } - project.Files.Remove (file); + // Delete file before removing them from the project to avoid Remove items being added + // if the project is currently being saved in memory or to disk. if (delete && !file.IsLink) FileService.DeleteFile (file.Name); + project.Files.Remove (file); } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs index 5070f796f1..f0404a5e03 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs @@ -230,19 +230,20 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad break; projects.Add (project); - - //remove the files and link files in the directory - foreach (var f in files) - project.Files.Remove (f); - - // also remove the folder's own ProjectFile, if it exists - // FIXME: it probably was already in the files list - if (folderPf != null) - project.Files.Remove (folderPf); } - + // Delete folder before removing it and its files from the project to avoid Remove items being + // added to the project if the project is currently being saved in memory or to disk. DeleteFolder (folder); - + + //remove the files and link files in the directory + foreach (var f in files) + project.Files.Remove (f); + + // also remove the folder's own ProjectFile, if it exists + // FIXME: it probably was already in the files list + if (folderPf != null) + project.Files.Remove (folderPf); + if (isProjectFolder && folder.Path.ParentDirectory != project.BaseDirectory) { // If it's the last item in the parent folder, make sure we keep a reference to the parent // folder, so it is not deleted from the tree. diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs index cc9212fe44..6ada8f0715 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/UnknownEntryNodeBuilder.cs @@ -97,7 +97,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad public async void OnReload () { var solutions = new HashSet<Solution> (); - Task task = Task.FromResult (0); + Task task = Task.CompletedTask; using (ProgressMonitor m = IdeApp.Workbench.ProgressMonitors.GetProjectLoadProgressMonitor (true)) { m.BeginTask (null, CurrentNodes.Length); foreach (ITreeNavigator node in CurrentNodes) { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs index c826300f8a..aac3a29b8f 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads/ErrorListPad.cs @@ -1041,7 +1041,7 @@ namespace MonoDevelop.Ide.Gui.Pads SetInitialOutputViewSize (control.Allocation.Width); if (visible) { - Counters.BuildLogShown++; + Counters.BuildLogShown.Inc (1); } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Shell/DefaultWorkbench.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Shell/DefaultWorkbench.cs index 4dad8a2ecb..253d1f5483 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Shell/DefaultWorkbench.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Shell/DefaultWorkbench.cs @@ -470,7 +470,7 @@ namespace MonoDevelop.Ide.Gui PadWindow win = (PadWindow) GetPadWindow (codon); if (win != null) { win.NotifyDestroyed (); - Counters.PadsLoaded--; + Counters.PadsLoaded.Dec (1); padCodons.Remove (win); } if (item != null) { diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Wizard/WizardDialogController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Wizard/WizardDialogController.cs index 94ee7d76f6..b99021a5cc 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Wizard/WizardDialogController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Wizard/WizardDialogController.cs @@ -141,7 +141,7 @@ namespace MonoDevelop.Ide.Gui.Wizard protected virtual Task OnCompleted (CancellationToken token) { - return Task.FromResult (true); + return Task.CompletedTask; } protected virtual void OnPropertyChanged (string propertyName) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs index 72fc681f2f..90185898da 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/Document.cs @@ -236,7 +236,7 @@ namespace MonoDevelop.Ide.Gui internal Document (DocumentManager documentManager, IShell shell, DocumentController controller, DocumentControllerDescription controllerDescription, IWorkbenchWindow window) { - Counters.OpenDocuments++; + Counters.OpenDocuments.Inc (1); this.shell = shell; this.documentManager = documentManager; @@ -377,7 +377,7 @@ namespace MonoDevelop.Ide.Gui public ITextBuffer TextBuffer => GetContent<ITextBuffer> (); - Task currentOperationTask = Task.FromResult (true); + Task currentOperationTask = Task.CompletedTask; Task RunAsyncOperation (Func<Task> action) { @@ -578,7 +578,7 @@ namespace MonoDevelop.Ide.Gui shell.CloseView (window, true); - Counters.OpenDocuments--; + Counters.OpenDocuments.Dec (1); Dispose (); diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs index 33c9d388a1..b4fa2f72b7 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/GtkNewProjectDialogBackend.cs @@ -78,23 +78,7 @@ namespace MonoDevelop.Ide.Projects actionHandler.PerformShowMenu += PerformShowMenu;
} - void ProjectCreationFailed (object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (true);
- void ProjectCreated(object obj, EventArgs args) => ShowProjectCreationAccessibityNotification (false);
async void NextButtonClicked (object sender, EventArgs e) => await MoveToNextPage ();
-
- void ShowProjectCreationAccessibityNotification (bool hasError)
- {
- var projectTemplate = controller.SelectedTemplate;
-
- string messageText; -
- if (hasError) - messageText = GettextCatalog.GetString ("{0} failed to create", projectTemplate.Name); - else - messageText = GettextCatalog.GetString ("{0} successfully created", projectTemplate.Name);
-
- this.Accessible.MakeAccessibilityAnnouncement (messageText); - }
public void ShowDialog ()
{
@@ -114,8 +98,6 @@ namespace MonoDevelop.Ide.Projects public void RegisterController (INewProjectDialogController controller)
{
this.controller = controller;
- controller.ProjectCreationFailed += ProjectCreationFailed;
- controller.ProjectCreated += ProjectCreated;
languageCellRenderer.SelectedLanguage = controller.SelectedLanguage;
topBannerLabel.Text = controller.BannerText;
LoadTemplates ();
@@ -299,9 +281,6 @@ namespace MonoDevelop.Ide.Projects if (!controller.IsLastPage)
projectConfigurationWidget.Destroy ();
- controller.ProjectCreationFailed -= ProjectCreationFailed;
- controller.ProjectCreated -= ProjectCreated;
-
base.OnDestroyed ();
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs index 455929c782..41705740a0 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs @@ -613,6 +613,8 @@ namespace MonoDevelop.Ide.Projects public async Task Create ()
{
+ Runtime.AssertMainThread (); + OnProjectCreating (); projectCreated = new TaskCompletionSource<bool> ();
if (wizardProvider.HasWizard)
@@ -620,7 +622,7 @@ namespace MonoDevelop.Ide.Projects if (!await CreateProject ()) { projectCreated.SetResult (false);
- ProjectCreationFailed?.Invoke (this, EventArgs.Empty);
+ OnProjectCreationFailed (); return;
}
@@ -714,13 +716,41 @@ namespace MonoDevelop.Ide.Projects UpdateDefaultSettings (); projectCreated.SetResult (true); - await Runtime.RunInMainThread (() => ProjectCreated?.Invoke (this, EventArgs.Empty)); + OnProjectCreated (); } catch (Exception ex) { projectCreated.SetException (ex); throw; }
} + void OnProjectCreating () + { + if (IdeServices.DesktopService.AccessibilityInUse) { + var announcement = GettextCatalog.GetString ("Creating project {0}", SelectedTemplate.Name); + IdeServices.DesktopService.MakeAccessibilityAnnouncement (announcement); + } + } + + void OnProjectCreationFailed () + { + ProjectCreationFailed?.Invoke (this, EventArgs.Empty); + + if (IdeServices.DesktopService.AccessibilityInUse) { + var announcement = GettextCatalog.GetString ("{0} failed to create", SelectedTemplate.Name); + IdeServices.DesktopService.MakeAccessibilityAnnouncement (announcement); + } + } + + void OnProjectCreated () + { + ProjectCreated?.Invoke (this, EventArgs.Empty); + + if (IdeServices.DesktopService.AccessibilityInUse) { + var announcement = GettextCatalog.GetString ("{0} successfully created", SelectedTemplate.Name); + IdeServices.DesktopService.MakeAccessibilityAnnouncement (announcement); + } + } + public Task<bool> ProjectCreation => projectCreated?.Task; TaskCompletionSource<bool> projectCreated;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/PropertyDescriptionTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/PropertyDescriptionTemplate.cs index 7b223911fe..0294419425 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/PropertyDescriptionTemplate.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/PropertyDescriptionTemplate.cs @@ -75,7 +75,7 @@ namespace MonoDevelop.Ide.Templates var fileName = StringParserService.Parse (name, model); project.ProjectProperties.SetValue (typeAtt.Value, string.IsNullOrEmpty (fileName) ? propertyInnerText : string.Concat (fileName, extension)); - return Task.FromResult(true); + return Task.FromResult (true); } } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs index bdd4b2039c..0032dd5951 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/MonoDevelopWorkspace.cs @@ -336,7 +336,10 @@ namespace MonoDevelop.Ide.TypeSystem protected override void ClearProjectData (ProjectId projectId)
{
var actualProject = ProjectMap.RemoveProject (projectId);
- UnloadMonoProject (actualProject);
+ // Do not unload the project if there are still project ids mappings defined for this project.
+ // This prevents the Project.Modified event being unsubscribed for the wrong project on project reload.
+ if (actualProject != null && ProjectMap.GetIds (actualProject) == null)
+ UnloadMonoProject (actualProject);
dynamicFileManager?.UnloadProject (projectId);
base.ClearProjectData (projectId);
@@ -994,7 +997,7 @@ namespace MonoDevelop.Ide.TypeSystem /// Used by tests to validate that project has been saved.
/// </summary>
/// <value>The task that can be awaited to validate saving has finished.</value>
- internal Task ProjectSaveTask { get; private set; } = Task.FromResult<object> (null);
+ internal Task ProjectSaveTask { get; private set; } = Task.CompletedTask;
internal override bool TryApplyChanges (Solution newSolution, IProgressTracker progressTracker)
{
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/DesktopService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/DesktopService.cs index 37c4cd60c9..a44b14be25 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/DesktopService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/DesktopService.cs @@ -447,6 +447,11 @@ namespace MonoDevelop.Ide PlatformService.RestartIde (reopenWorkspace); } + public void MakeAccessibilityAnnouncement(string text) + { + PlatformService.MakeAccessibilityAnnouncement (text); + } + public bool AccessibilityInUse { get { return PlatformService.AccessibilityInUse; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ImageService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ImageService.cs index b1dc79a125..cd1b75f497 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ImageService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ImageService.cs @@ -913,7 +913,7 @@ namespace MonoDevelop.Ide class CustomImageLoader : Xwt.Drawing.IImageLoader { RuntimeAddin addin; - Dictionary<System.Reflection.Assembly, string []> resources = new Dictionary<System.Reflection.Assembly, string[]> (); + static Dictionary<System.Reflection.Assembly, List<string>> resources = new Dictionary<System.Reflection.Assembly, List<string>> (); public CustomImageLoader (RuntimeAddin addin) { @@ -924,11 +924,12 @@ namespace MonoDevelop.Ide { var r = addin.GetResourceInfo (fileName); - string [] resourceList; - if (!resources.TryGetValue (r.ReferencedAssembly, out resourceList)) - resourceList = resources [r.ReferencedAssembly] = r.ReferencedAssembly.GetManifestResourceNames (); + if (!resources.TryGetValue (r.ReferencedAssembly, out var resourceList)) { + resourceList = resources [r.ReferencedAssembly] = r.ReferencedAssembly.GetManifestResourceNames ().ToList (); + resourceList.Sort (); // sort resources by name + } - return resourceList; + return resourceList.Where (r => r.StartsWith (baseName) && r.EndsWith (ext)); } public Stream LoadImage (string fileName) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs index d324842b72..190e9db83b 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/ProjectOperations.cs @@ -529,7 +529,7 @@ namespace MonoDevelop.Ide return SaveAsync ((IWorkspaceFileObject)item); if (item.ParentObject != null) return SaveAsync (item.ParentObject); - return Task.FromResult (0); + return Task.CompletedTask; } async Task SaveAsync (IWorkspaceFileObject item) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/RootWorkspace.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/RootWorkspace.cs index c3303b93ab..0b95aad703 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/RootWorkspace.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide/RootWorkspace.cs @@ -429,7 +429,7 @@ namespace MonoDevelop.Ide Task IBuildTarget.PrepareExecution (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) { - return Task.FromResult (0); + return Task.CompletedTask; } public Task Execute (ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration) diff --git a/main/src/core/MonoDevelop.Startup/app.config b/main/src/core/MonoDevelop.Startup/app.config index ac6d9c0ea6..31a7a20181 100644 --- a/main/src/core/MonoDevelop.Startup/app.config +++ b/main/src/core/MonoDevelop.Startup/app.config @@ -36,20 +36,20 @@ <dependentAssembly><assemblyIdentity name="Mono.Cecil" culture="neutral" publicKeyToken="50cebf1cceb9d05e" /><bindingRedirect oldVersion="0.0.0.0-0.10.1.0" newVersion="0.10.1.0" /></dependentAssembly> <dependentAssembly><assemblyIdentity name="mscorlib" culture="neutral" publicKeyToken="b77a5c561934e089" /><bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /></dependentAssembly> <dependentAssembly><assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Commands" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Common" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Credentials" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.DependencyResolver.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Frameworks" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Indexing" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.LibraryModel" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.PackageManagement" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Packaging" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.ProjectModel" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Protocol" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Resolver" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> - <dependentAssembly><assemblyIdentity name="NuGet.Versioning" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.3.0.3" newVersion="5.3.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Commands" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Common" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Credentials" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.DependencyResolver.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Frameworks" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Indexing" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.LibraryModel" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.PackageManagement" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Packaging" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.ProjectModel" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Protocol" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Resolver" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> + <dependentAssembly><assemblyIdentity name="NuGet.Versioning" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.4.0.3" newVersion="5.4.0.3" /></dependentAssembly> <dependentAssembly><assemblyIdentity name="SQLitePCLRaw.batteries_v2" culture="neutral" publicKeyToken="8226ea5df37bcae9" /><bindingRedirect oldVersion="0.0.0.0-1.1.12.351" newVersion="1.1.12.351" /></dependentAssembly> <dependentAssembly><assemblyIdentity name="SQLitePCLRaw.core" culture="neutral" publicKeyToken="1488e028ca7ab535" /><bindingRedirect oldVersion="0.0.0.0-1.1.12.351" newVersion="1.1.12.351" /></dependentAssembly> <dependentAssembly><assemblyIdentity name="StreamJsonRpc" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" /><bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" /></dependentAssembly> |