Browse Source

Fixed race condition in project.GetOrCreateBehavior().

Avoid loading behaviors into UnknownProject/MissingProject.
pull/18/head
Daniel Grunwald 14 years ago
parent
commit
0a4d05cc97
  1. 8
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs
  2. 8
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  3. 9
      src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs
  4. 8
      src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs
  5. 8
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonProject.cs
  6. 8
      src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyProject.cs
  7. 8
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  8. 8
      src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
  9. 8
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  10. 3
      src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs
  11. 5
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  12. 10
      src/Main/Base/Project/Src/Project/MissingProject.cs
  13. 10
      src/Main/Base/Project/Src/Project/UnknownProject.cs
  14. 2
      src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

8
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs

@ -131,13 +131,9 @@ namespace Grunwald.BooBinding
} }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new BooProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
BooProjectBehavior behavior = new BooProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

8
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -149,13 +149,9 @@ namespace CSharpBinding
} }
*/ */
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new CSharpProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
CSharpProjectBehavior behavior = new CSharpProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

9
src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs

@ -181,13 +181,10 @@ namespace ICSharpCode.CppBinding.Project
} }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new CppProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior; }
CppProjectBehavior behavior = new CppProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior; }
} }
public class CppProjectBehavior : ProjectBehavior public class CppProjectBehavior : ProjectBehavior

8
src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs

@ -44,13 +44,9 @@ namespace FSharpBinding
} }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new FSharpProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
FSharpProjectBehavior behavior = new FSharpProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

8
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonProject.cs

@ -53,13 +53,9 @@ namespace ICSharpCode.PythonBinding
get { return GetProperty(null, null, "MainFile") != null; } get { return GetProperty(null, null, "MainFile") != null; }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new PythonProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
PythonProjectBehavior behavior = new PythonProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

8
src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyProject.cs

@ -49,13 +49,9 @@ namespace ICSharpCode.RubyBinding
get { return GetProperty(null, null, "MainFile") != null; } get { return GetProperty(null, null, "MainFile") != null; }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new RubyProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
RubyProjectBehavior behavior = new RubyProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

8
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -185,13 +185,9 @@ namespace ICSharpCode.VBNetBinding
return "On".Equals(val, StringComparison.OrdinalIgnoreCase); return "On".Equals(val, StringComparison.OrdinalIgnoreCase);
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new VBProjectBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
VBProjectBehavior behavior = new VBProjectBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

8
src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs

@ -216,13 +216,9 @@ namespace ICSharpCode.WixBinding
return new ReadOnlyCollection<WixExtensionProjectItem>(items); return new ReadOnlyCollection<WixExtensionProjectItem>(items);
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
if (projectBehavior != null) return new WixStartBehavior(this, base.CreateDefaultBehavior());
return projectBehavior;
WixStartBehavior behavior = new WixStartBehavior(this, new DotNetStartBehavior(this, new DefaultProjectBehavior(this)));
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, behavior);
return projectBehavior;
} }
} }

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

@ -591,9 +591,11 @@ namespace ICSharpCode.SharpDevelop.Project
protected virtual ProjectBehavior GetOrCreateBehavior() protected virtual ProjectBehavior GetOrCreateBehavior()
{ {
if (projectBehavior == null) lock (SyncRoot) {
projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, CreateDefaultBehavior()); if (projectBehavior == null)
return projectBehavior; projectBehavior = ProjectBehaviorService.LoadBehaviorsForProject(this, CreateDefaultBehavior());
return projectBehavior;
}
} }
} }
} }

3
src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs

@ -39,6 +39,9 @@ namespace ICSharpCode.SharpDevelop.Project
string guid = ((MSBuildBasedProject)project).GetEvaluatedProperty("ProjectTypeGuids"); string guid = ((MSBuildBasedProject)project).GetEvaluatedProperty("ProjectTypeGuids");
if (!string.IsNullOrEmpty(guid)) if (!string.IsNullOrEmpty(guid))
return guid; return guid;
} else if (project is UnknownProject || project is MissingProject) {
// don't return any GUID for projects that could not be loaded
return string.Empty;
} }
return project.TypeGuid; return project.TypeGuid;

5
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -263,6 +263,11 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
protected override ProjectBehavior CreateDefaultBehavior()
{
return new DotNetStartBehavior(this, base.CreateDefaultBehavior());
}
#region IUpgradableProject #region IUpgradableProject
[Browsable(false)] [Browsable(false)]
public virtual bool UpgradeDesired { public virtual bool UpgradeDesired {

10
src/Main/Base/Project/Src/Project/MissingProject.cs

@ -20,5 +20,15 @@ namespace ICSharpCode.SharpDevelop.Project
return true; return true;
} }
} }
protected override ProjectBehavior GetOrCreateBehavior()
{
// don't add behaviors from AddIn-Tree to MissingProject
lock (SyncRoot) {
if (projectBehavior == null)
projectBehavior = new DefaultProjectBehavior(this);
return projectBehavior;
}
}
} }
} }

10
src/Main/Base/Project/Src/Project/UnknownProject.cs

@ -42,5 +42,15 @@ namespace ICSharpCode.SharpDevelop.Project
FileName = fileName; FileName = fileName;
TypeGuid = "{00000000-0000-0000-0000-000000000000}"; TypeGuid = "{00000000-0000-0000-0000-000000000000}";
} }
protected override ProjectBehavior GetOrCreateBehavior()
{
// don't add behaviors from AddIn-Tree to UnknownProject
lock (SyncRoot) {
if (projectBehavior == null)
projectBehavior = new DefaultProjectBehavior(this);
return projectBehavior;
}
}
} }
} }

2
src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

@ -47,7 +47,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
get { return ICSharpCode.SharpDevelop.Dom.LanguageProperties.CSharp; } get { return ICSharpCode.SharpDevelop.Dom.LanguageProperties.CSharp; }
} }
protected override ProjectBehavior GetOrCreateBehavior() protected override ProjectBehavior CreateDefaultBehavior()
{ {
return new DotNetStartBehavior(this, null); return new DotNetStartBehavior(this, null);
} }

Loading…
Cancel
Save