Browse Source

fix #279: Reference project items are UnknownProjectItems after creating a new project

pull/297/head
Siegfried Pammer 12 years ago
parent
commit
54d43aedbc
  1. 18
      src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs
  2. 6
      src/Main/SharpDevelop/Templates/Project/ProjectTemplateImpl.cs
  3. 5
      src/Main/SharpDevelop/Templates/Project/SolutionDescriptor.cs

18
src/Main/SharpDevelop/Templates/Project/ProjectDescriptor.cs

@ -267,7 +267,7 @@ namespace ICSharpCode.SharpDevelop.Templates
#region Create new project from template #region Create new project from template
//Show prompt, create files from template, create project, execute command, save project //Show prompt, create files from template, create project, execute command, save project
public IProject CreateProject(ProjectTemplateResult templateResults, string defaultLanguage) public bool CreateProject(ProjectTemplateResult templateResults, string defaultLanguage, ISolutionFolder target)
{ {
var projectCreateOptions = templateResults.Options; var projectCreateOptions = templateResults.Options;
var parentSolution = templateResults.Options.Solution; var parentSolution = templateResults.Options.Solution;
@ -283,7 +283,7 @@ namespace ICSharpCode.SharpDevelop.Templates
MessageService.ShowError( MessageService.ShowError(
StringParser.Parse("${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.CantCreateProjectWithTypeError}", StringParser.Parse("${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.CantCreateProjectWithTypeError}",
new StringTagPair("type", language))); new StringTagPair("type", language)));
return null; return false;
} }
DirectoryName projectBasePath = projectCreateOptions.ProjectBasePath; DirectoryName projectBasePath = projectCreateOptions.ProjectBasePath;
@ -335,7 +335,7 @@ namespace ICSharpCode.SharpDevelop.Templates
new StringTagPair("projectLocation", projectLocation)), new StringTagPair("projectLocation", projectLocation)),
"${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.OverwriteQuestion.InfoName}")) "${res:ICSharpCode.SharpDevelop.Internal.Templates.ProjectDescriptor.OverwriteQuestion.InfoName}"))
{ {
return null; //The user doesnt want to overwrite the project... return false; //The user doesnt want to overwrite the project...
} }
} }
@ -408,10 +408,11 @@ namespace ICSharpCode.SharpDevelop.Templates
#region Create Project #region Create Project
try { try {
info.InitializeTypeSystem = false;
project = languageinfo.CreateProject(info); project = languageinfo.CreateProject(info);
} catch (ProjectLoadException ex) { } catch (ProjectLoadException ex) {
MessageService.ShowError(ex.Message); MessageService.ShowError(ex.Message);
return null; return false;
} }
#endregion #endregion
@ -511,11 +512,18 @@ namespace ICSharpCode.SharpDevelop.Templates
// Save project // Save project
project.Save(); project.Save();
// HACK : close and reload
var fn = project.FileName;
project.Dispose();
ProjectLoadInformation loadInfo = new ProjectLoadInformation(parentSolution, fn, fn.GetFileNameWithoutExtension());
project = SD.ProjectService.LoadProject(loadInfo);
target.Items.Add(project);
project.ProjectLoaded();
SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectCreated(new ProjectEventArgs(project)); SD.GetRequiredService<IProjectServiceRaiseEvents>().RaiseProjectCreated(new ProjectEventArgs(project));
templateResults.NewProjects.Add(project); templateResults.NewProjects.Add(project);
success = true; success = true;
return project; return true;
} finally { } finally {
if (project != null && !success) if (project != null && !success)
project.Dispose(); project.Dispose();

6
src/Main/SharpDevelop/Templates/Project/ProjectTemplateImpl.cs

@ -266,10 +266,8 @@ namespace ICSharpCode.SharpDevelop.Templates
return null; return null;
} }
if (projectDescriptor != null) { if (projectDescriptor != null) {
IProject project = projectDescriptor.CreateProject(result, languagename); bool success = projectDescriptor.CreateProject(result, languagename, options.SolutionFolder);
if (project != null) { if (!success) {
options.SolutionFolder.Items.Add(project);
} else {
return null; return null;
} }
} }

5
src/Main/SharpDevelop/Templates/Project/SolutionDescriptor.cs

@ -45,10 +45,9 @@ namespace ICSharpCode.SharpDevelop.Templates
return false; return false;
} }
foreach (ProjectDescriptor projectDescriptor in projectDescriptors) { foreach (ProjectDescriptor projectDescriptor in projectDescriptors) {
IProject newProject = projectDescriptor.CreateProject(templateResult, defaultLanguage); bool success = projectDescriptor.CreateProject(templateResult, defaultLanguage, parentFolder);
if (newProject == null) if (!success)
return false; return false;
parentFolder.Items.Add(newProject);
} }
return true; return true;
} }

Loading…
Cancel
Save