Browse Source

When loading a solution, open files after the project content stubs were created.

This fixes SD2-728 and improves solution-load-time when the DefaultProjectContent is not required.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1343 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
601be026a8
  1. 6
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  2. 4
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  3. 15
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

6
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -779,6 +779,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -779,6 +779,8 @@ namespace ICSharpCode.SharpDevelop.Project
return properties;
}
internal static List<string> filesToOpenAfterSolutionLoad = new List<string>();
/// <summary>
/// Loads project preferences (currently opened files, bookmarks etc.).
/// </summary>
@ -788,9 +790,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -788,9 +790,7 @@ namespace ICSharpCode.SharpDevelop.Project
ICSharpCode.SharpDevelop.Bookmarks.BookmarkManager.AddMark(mark);
}
foreach (string fileName in properties.Get("files", new string[0])) {
if (File.Exists(fileName)) {
FileService.OpenFile(fileName);
}
filesToOpenAfterSolutionLoad.Add(fileName);
}
}
}

4
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -155,6 +155,7 @@ namespace ICSharpCode.Core @@ -155,6 +155,7 @@ namespace ICSharpCode.Core
ICSharpCode.Core.MessageService.ShowError(e, "Error while retrieving project contents from " + project);
}
}
WorkbenchSingleton.SafeThreadAsyncCall((ThreadStart)ProjectService.ParserServiceCreatedProjectContents);
int workAmount = 0;
foreach (ParseProjectContent newContent in createdContents) {
if (abortLoadSolutionProjectsThread) return;
@ -167,7 +168,7 @@ namespace ICSharpCode.Core @@ -167,7 +168,7 @@ namespace ICSharpCode.Core
}
StatusBarService.ProgressMonitor.BeginTask("Parsing...", workAmount);
foreach (ParseProjectContent newContent in createdContents) {
if (abortLoadSolutionProjectsThread) return;
if (abortLoadSolutionProjectsThread) break;
try {
newContent.Initialize2();
} catch (Exception e) {
@ -182,6 +183,7 @@ namespace ICSharpCode.Core @@ -182,6 +183,7 @@ namespace ICSharpCode.Core
ParseProjectContent newContent = (ParseProjectContent)state;
newContent.Initialize1();
newContent.Initialize2();
StatusBarService.ProgressMonitor.Done();
}
internal static IProjectContent CreateProjectContentForAddedProject(IProject project)

15
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -230,6 +230,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -230,6 +230,7 @@ namespace ICSharpCode.SharpDevelop.Project
MessageService.ShowError(ex.Message);
return;
}
AbstractProject.filesToOpenAfterSolutionLoad.Clear();
try {
string file = GetPreferenceFileName(openSolution.FileName);
if (FileUtility.IsValidFileName(file) && File.Exists(file)) {
@ -239,11 +240,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -239,11 +240,24 @@ namespace ICSharpCode.SharpDevelop.Project
} catch (Exception ex) {
MessageService.ShowError(ex);
}
// Create project contents for solution
ParserService.OnSolutionLoaded();
// preferences must be read before OnSolutionLoad is called to enable
// the event listeners to read e.Solution.Preferences.Properties
OnSolutionLoaded(new SolutionEventArgs(openSolution));
}
internal static void ParserServiceCreatedProjectContents()
{
foreach (string file in AbstractProject.filesToOpenAfterSolutionLoad) {
if (File.Exists(file)) {
FileService.OpenFile(file);
}
}
AbstractProject.filesToOpenAfterSolutionLoad.Clear();
}
static void ApplyConfigurationAndReadPreferences()
{
openSolution.ApplySolutionConfigurationToProjects();
@ -396,7 +410,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -396,7 +410,6 @@ namespace ICSharpCode.SharpDevelop.Project
static void OnSolutionLoaded(SolutionEventArgs e)
{
ParserService.OnSolutionLoaded();
if (SolutionLoaded != null) {
SolutionLoaded(null, e);
}

Loading…
Cancel
Save