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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -591,9 +591,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -591,9 +591,11 @@ namespace ICSharpCode.SharpDevelop.Project
protected virtual ProjectBehavior GetOrCreateBehavior()
{
lock (SyncRoot) {
if (projectBehavior == null)
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 @@ -39,6 +39,9 @@ namespace ICSharpCode.SharpDevelop.Project
string guid = ((MSBuildBasedProject)project).GetEvaluatedProperty("ProjectTypeGuids");
if (!string.IsNullOrEmpty(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;

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

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

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

@ -20,5 +20,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -20,5 +20,15 @@ namespace ICSharpCode.SharpDevelop.Project
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 @@ -42,5 +42,15 @@ namespace ICSharpCode.SharpDevelop.Project
FileName = fileName;
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 @@ -47,7 +47,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
get { return ICSharpCode.SharpDevelop.Dom.LanguageProperties.CSharp; }
}
protected override ProjectBehavior GetOrCreateBehavior()
protected override ProjectBehavior CreateDefaultBehavior()
{
return new DotNetStartBehavior(this, null);
}

Loading…
Cancel
Save