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

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

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

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

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

Loading…
Cancel
Save