Browse Source

Implement EnvDTE.CodeTypeRef and EnvDTE.CodeTypeRef2.

pull/28/head
Matt Ward 14 years ago
parent
commit
a7e6377779
  1. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 7
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
  4. 21
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
  5. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs
  6. 19
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs
  7. 2
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  8. 26
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
  9. 128
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs
  10. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/AttributeHelper.cs
  11. 10
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ClassHelper.cs
  12. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
  13. 35
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

1
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -110,6 +110,7 @@ @@ -110,6 +110,7 @@
<Compile Include="Src\EnvDTE\Constants.cs" />
<Compile Include="Src\EnvDTE\EditPoint.cs" />
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\ProjectKind.cs" />
<Compile Include="Src\EnvDTE\Projects.cs" />

7
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs

@ -19,12 +19,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -19,12 +19,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public CodeInterface(IProjectContent projectContent, IReturnType type, IClass c)
: base(projectContent, c)
{
fullName = GetFullName(type);
}
string GetFullName(IReturnType type)
{
return type.DotNetName.Replace("{", "<").Replace("}", ">");
fullName = type.GetFullName();
}
/// <summary>

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

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

21
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs

@ -2,25 +2,38 @@ @@ -2,25 +2,38 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeTypeRef : MarshalByRefObject
{
IProjectContent projectContent;
CodeElement parent;
public CodeTypeRef()
{
}
public CodeTypeRef(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
{
this.parent = parent;
this.projectContent = projectContent;
this.ReturnType = returnType;
}
protected IReturnType ReturnType { get; private set; }
public virtual string AsFullName {
get { throw new NotImplementedException(); }
get { return ReturnType.GetFullName(); }
}
public virtual object Parent {
get { throw new NotImplementedException(); }
public virtual CodeElement Parent {
get { return parent; }
}
public virtual CodeType CodeType {
get { throw new NotImplementedException(); }
get { return new CodeClass2(projectContent, ReturnType.GetUnderlyingClass()); }
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs

@ -2,17 +2,19 @@ @@ -2,17 +2,19 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeTypeRef2 : CodeTypeRef
{
public CodeTypeRef2()
public CodeTypeRef2(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
: base(projectContent, parent, returnType)
{
}
public bool IsGeneric {
get { throw new NotImplementedException(); }
get { return ReturnType.DotNetName.Contains("{"); }
}
}
}

19
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public static class IReturnTypeExtensions
{
public static string GetFullName(this IReturnType returnType)
{
return returnType
.DotNetName
.Replace('{', '<')
.Replace('}', '>');
}
}
}

2
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -82,6 +82,7 @@ @@ -82,6 +82,7 @@
<Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeStructTests.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeTypeTests.cs" />
<Compile Include="Src\EnvDTE\CodeVariableTests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />
@ -98,6 +99,7 @@ @@ -98,6 +99,7 @@
<Compile Include="Src\Helpers\ProjectContentHelper.cs" />
<Compile Include="Src\Helpers\PropertiesHelper.cs" />
<Compile Include="Src\Helpers\PropertyHelper.cs" />
<Compile Include="Src\Helpers\ReturnTypeHelper.cs" />
<Compile Include="Src\Helpers\SelectedProjectCollectionAssert.cs" />
<Compile Include="Src\Helpers\TestableInstalledPackageViewModel.cs" />
<Compile Include="Src\Helpers\TestablePackageFromRepository.cs" />

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

@ -240,5 +240,31 @@ namespace PackageManagement.Tests.EnvDTE @@ -240,5 +240,31 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Type_PropertyTypeIsSystemString_ReturnsSystemString()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("System.String");
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
string fullName = typeRef.AsFullName;
Assert.AreEqual("System.String", fullName);
}
[Test]
public void Type_PropertyTypeIsSystemString_TypesParentIsProperty()
{
helper.CreatePublicProperty("MyProperty");
helper.SetPropertyReturnType("System.String");
CreateCodeProperty2();
CodeTypeRef typeRef = property.Type;
CodeElement parent = typeRef.Parent;
Assert.AreEqual(property, parent);
}
}
}

128
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeTypeRef2Tests
{
CodeTypeRef2 typeRef;
ReturnTypeHelper helper;
CodeElement parent;
ClassHelper classHelper;
[SetUp]
public void Init()
{
helper = new ReturnTypeHelper();
classHelper = new ClassHelper();
parent = new CodeElement();
}
void AddUnderlyingClassToReturnType(string fullyQualifiedName)
{
classHelper.CreatePublicClass(fullyQualifiedName);
helper.AddUnderlyingClass(classHelper.Class);
}
void CreateCodeTypeRef2()
{
typeRef = new CodeTypeRef2(classHelper.ProjectContentHelper.FakeProjectContent, parent, helper.ReturnType);
}
void ReturnTypeUsesDifferentProjectContent()
{
classHelper = new ClassHelper();
classHelper.ProjectContentHelper.SetProjectForProjectContent(ProjectHelper.CreateTestProject());
}
void ReturnTypeSameProjectContent()
{
var project = ProjectHelper.CreateTestProject();
classHelper.ProjectContentHelper.SetProjectForProjectContent(project);
}
[Test]
public void CodeType_ReturnTypeIsSystemString_ReturnsCodeClass2ForSystemStringType()
{
helper.CreateReturnType("System.String");
AddUnderlyingClassToReturnType("System.String");
CreateCodeTypeRef2();
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
string name = codeClass.FullName;
Assert.AreEqual("System.String", name);
}
[Test]
public void CodeType_ReturnTypeFromDifferentProjectContent_CodeTypeLocationIsExternal()
{
helper.CreateReturnType("System.String");
AddUnderlyingClassToReturnType("System.String");
ReturnTypeUsesDifferentProjectContent();
CreateCodeTypeRef2();
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
vsCMInfoLocation location = codeClass.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationExternal, location);
}
[Test]
public void CodeType_ReturnTypeFromSameProjectContent_CodeTypeLocationIsProject()
{
helper.CreateReturnType("MyType");
AddUnderlyingClassToReturnType("MyType");
ReturnTypeSameProjectContent();
CreateCodeTypeRef2();
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
vsCMInfoLocation location = codeClass.InfoLocation;
Assert.AreEqual(vsCMInfoLocation.vsCMInfoLocationProject, location);
}
[Test]
public void IsGeneric_NotGenericReturnType_ReturnsFalse()
{
helper.CreateReturnType("MyType");
helper.AddDotNetName("MyType");
CreateCodeTypeRef2();
bool generic = typeRef.IsGeneric;
Assert.IsFalse(generic);
}
[Test]
public void IsGeneric_GenericReturnType_ReturnsTrue()
{
helper.CreateReturnType("System.Nullable");
helper.AddDotNetName("System.Nullable{System.String}");
CreateCodeTypeRef2();
bool generic = typeRef.IsGeneric;
Assert.IsTrue(generic);
}
[Test]
public void AsFullName_GenericReturnType_ReturnsDotNetNameWithCurlyBracesReplacedWithAngleBrackets()
{
helper.CreateReturnType("System.Nullable");
helper.AddDotNetName("System.Nullable{System.String}");
CreateCodeTypeRef2();
string name = typeRef.AsFullName;
Assert.AreEqual("System.Nullable<System.String>", name);
}
}
}

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/AttributeHelper.cs

@ -22,9 +22,11 @@ namespace PackageManagement.Tests.Helpers @@ -22,9 +22,11 @@ namespace PackageManagement.Tests.Helpers
public void CreateAttribute(string fullName, string shortName)
{
AttributeType = MockRepository.GenerateStub<IReturnType>();
AttributeType.Stub(at => at.FullyQualifiedName).Return(fullName);
AttributeType.Stub(at => at.Name).Return(shortName);
var returnTypeHelper = new ReturnTypeHelper();
returnTypeHelper.CreateReturnType(fullName);
returnTypeHelper.AddShortName(shortName);
AttributeType = returnTypeHelper.ReturnType;
Attribute = MockRepository.GenerateStub<IAttribute>();
Attribute.Stub(a => a.AttributeType).Return(AttributeType);
Attribute.Stub(a => a.PositionalArguments).Return(PositionalArguments);

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

@ -66,11 +66,11 @@ namespace PackageManagement.Tests.Helpers @@ -66,11 +66,11 @@ namespace PackageManagement.Tests.Helpers
IReturnType CreateBaseType(IClass baseTypeClass, string baseTypeFullName, string baseTypeDotNetName)
{
IReturnType baseType = MockRepository.GenerateStub<IReturnType>();
baseType.Stub(b => b.GetUnderlyingClass()).Return(baseTypeClass);
baseType.Stub(b => b.FullyQualifiedName).Return(baseTypeFullName);
baseType.Stub(b => b.DotNetName).Return(baseTypeDotNetName);
return baseType;
var returnTypeHelper = new ReturnTypeHelper();
returnTypeHelper.CreateReturnType(baseTypeFullName);
returnTypeHelper.AddUnderlyingClass(baseTypeClass);
returnTypeHelper.AddDotNetName(baseTypeDotNetName);
return returnTypeHelper.ReturnType;
}
public void AddClassToClassBaseTypes(string fullName)

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

@ -12,6 +12,7 @@ namespace PackageManagement.Tests.Helpers @@ -12,6 +12,7 @@ namespace PackageManagement.Tests.Helpers
{
public IProperty Property;
public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper();
public ReturnTypeHelper ReturnTypeHelper = new ReturnTypeHelper();
List<IAttribute> attributes = new List<IAttribute>();
List<IParameter> parameters = new List<IParameter>();
@ -114,5 +115,12 @@ namespace PackageManagement.Tests.Helpers @@ -114,5 +115,12 @@ namespace PackageManagement.Tests.Helpers
{
GetterModifier = ModifierEnum.None;
}
public void SetPropertyReturnType(string fullName)
{
ReturnTypeHelper.CreateReturnType(fullName);
ReturnTypeHelper.AddDotNetName(fullName);
Property.Stub(p => p.ReturnType).Return(ReturnTypeHelper.ReturnType);
}
}
}

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

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
using Rhino.Mocks;
namespace PackageManagement.Tests.Helpers
{
public class ReturnTypeHelper
{
public IReturnType ReturnType;
public void CreateReturnType(string fullyQualifiedName)
{
ReturnType = MockRepository.GenerateStub<IReturnType>();
ReturnType.Stub(b => b.FullyQualifiedName).Return(fullyQualifiedName);
}
public void AddDotNetName(string name)
{
ReturnType.Stub(t => t.DotNetName).Return(name);
}
public void AddShortName(string name)
{
ReturnType.Stub(t => t.Name).Return(name);
}
public void AddUnderlyingClass(IClass c)
{
ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c);
}
}
}
Loading…
Cancel
Save