Browse Source

Fix null reference when accessing the InfoLocation of a EnvDTE CodeProperty's Type.

pull/28/head
Matt Ward 14 years ago
parent
commit
baa60e5fb4
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
  2. 36
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
  3. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs
  5. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
  6. 2
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs

@ -38,7 +38,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -38,7 +38,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual CodeTypeRef Type {
get { return new CodeTypeRef2(null, this, Property.ReturnType); }
get { return new CodeTypeRef2(Property.ProjectContent, this, Property.ReturnType); }
}
public virtual CodeFunction Getter {

36
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs

@ -267,6 +267,42 @@ namespace PackageManagement.Tests.EnvDTE @@ -267,6 +267,42 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(property, parent);
}
[Test]
public void Type_PropertyTypeIsSystemString_TypeRefTypeInfoLocationIsExternal()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("System.String");
helper.CreateProjectForProjectContent();
var classHelper = new ClassHelper();
classHelper.CreateClass("System.String");
classHelper.SetProjectForProjectContent(null);
helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationExternal, location);
}
[Test]
public void Type_PropertyTypeExistsInProject_TypeRefTypeInfoLocationIsProject()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("MyType");
helper.CreateProjectForProjectContent();
var classHelper = new ClassHelper();
classHelper.CreateClass("MyType");
classHelper.SetProjectForProjectContent(helper.Project);
helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationProject, location);
}
[Test]
public void Kind_PublicProperty_ReturnsProperty()
{

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs

@ -157,5 +157,10 @@ namespace PackageManagement.Tests.Helpers @@ -157,5 +157,10 @@ namespace PackageManagement.Tests.Helpers
{
Class.Stub(c => c.ClassType).Return(type);
}
public void SetProjectForProjectContent(object project)
{
ProjectContentHelper.SetProjectForProjectContent(project);
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

@ -22,7 +22,7 @@ namespace PackageManagement.Tests.Helpers @@ -22,7 +22,7 @@ namespace PackageManagement.Tests.Helpers
ProjectContent.Stub(pc => pc.NamespaceNames).Return(NamespaceNames);
}
public void SetProjectForProjectContent(IProject project)
public void SetProjectForProjectContent(object project)
{
ProjectContent.Stub(pc => pc.Project).Return(project);
}

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs

@ -122,5 +122,14 @@ namespace PackageManagement.Tests.Helpers @@ -122,5 +122,14 @@ namespace PackageManagement.Tests.Helpers
ReturnTypeHelper.AddDotNetName(fullName);
Property.Stub(p => p.ReturnType).Return(ReturnTypeHelper.ReturnType);
}
public object Project {
get { return ProjectContentHelper.ProjectContent.Project; }
}
public void CreateProjectForProjectContent()
{
ProjectContentHelper.SetProjectForProjectContent(ProjectHelper.CreateTestProject());
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

@ -32,7 +32,5 @@ namespace PackageManagement.Tests.Helpers @@ -32,7 +32,5 @@ namespace PackageManagement.Tests.Helpers
{
ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c);
}
}
}

Loading…
Cancel
Save