Browse Source

Implement EnvDTE.CodeType.Bases

pull/28/head
Matt Ward 14 years ago
parent
commit
5d28bce57c
  1. 10
      src/AddIns/Misc/PackageManagement/PackageManagement.sln
  2. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  3. 8
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
  4. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  5. 11
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  6. 26
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeBaseTypes.cs
  7. 28
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  8. 23
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

10
src/AddIns/Misc/PackageManagement/PackageManagement.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.1.0.7374-alpha
# SharpDevelop 4.3.0.8816-alpha
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "Test\PackageManagement.Tests.csproj", "{56E98A01-8398-4A08-9578-C7337711A52B}"
@ -172,5 +172,13 @@ Global @@ -172,5 +172,13 @@ Global
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Release|x86.ActiveCfg = Release|x86
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Release|Any CPU.Build.0 = Release|x86
{A406803B-C584-43A3-BCEE-A0BB3132CB5F}.Release|Any CPU.ActiveCfg = Release|x86
{56E98A01-8398-4A08-9578-C7337711A52B}.Debug|Any CPU.Build.0 = Debug|x86
{56E98A01-8398-4A08-9578-C7337711A52B}.Debug|Any CPU.ActiveCfg = Debug|x86
{56E98A01-8398-4A08-9578-C7337711A52B}.Release|Any CPU.Build.0 = Release|x86
{56E98A01-8398-4A08-9578-C7337711A52B}.Release|Any CPU.ActiveCfg = Release|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.Build.0 = Debug|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Debug|Any CPU.ActiveCfg = Debug|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.Build.0 = Release|x86
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}.Release|Any CPU.ActiveCfg = Release|x86
EndGlobalSection
EndGlobal

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

@ -95,6 +95,7 @@ @@ -95,6 +95,7 @@
<Compile Include="Src\EnvDTE\CodeProperty2.cs" />
<Compile Include="Src\EnvDTE\CodeStruct.cs" />
<Compile Include="Src\EnvDTE\CodeType.cs" />
<Compile Include="Src\EnvDTE\CodeTypeBaseTypes.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef2.cs" />
<Compile Include="Src\EnvDTE\CodeVariable.cs" />

8
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs

@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeAttribute2 : CodeAttribute
{
CodeAttributeArguments arguments;
IAttribute attribute;
public CodeAttribute2()
@ -22,12 +21,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -22,12 +21,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual CodeElements Arguments {
get {
if (arguments == null) {
arguments = new CodeAttributeArguments(attribute);
}
return arguments;
}
get { return new CodeAttributeArguments(attribute); }
}
}
}

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

@ -16,5 +16,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -16,5 +16,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public CodeElements PartialClasses {
get { throw new NotImplementedException(); }
}
public static CodeClass2 CreateFromBaseType(IProjectContent projectContent, IReturnType baseType)
{
IClass baseTypeClass = baseType.GetUnderlyingClass();
return new CodeClass2(projectContent, baseTypeClass);
}
}
}

11
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -8,8 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -8,8 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeType : CodeElement
{
CodeAttributes attributes;
/// <summary>
/// Note that projectContent may be different to the IClass.ProjectContent since the class
/// is retrieved from the namespace contents and could belong to a separate project or
@ -52,16 +50,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -52,16 +50,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual CodeElements Bases {
get { throw new NotImplementedException(); }
get { return new CodeTypeBaseTypes(ProjectContent, Class); }
}
public virtual CodeElements Attributes {
get {
if (attributes == null) {
attributes = new CodeAttributes(Class);
}
return attributes;
}
get { return new CodeAttributes(Class); }
}
}
}

26
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeBaseTypes.cs

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// 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 class CodeTypeBaseTypes : CodeElementsList
{
IProjectContent projectContent;
IClass c;
public CodeTypeBaseTypes(IProjectContent projectContent, IClass c)
{
this.projectContent = projectContent;
this.c = c;
AddBaseTypes();
}
void AddBaseTypes()
{
AddCodeElement(CodeClass2.CreateFromBaseType(projectContent, c.BaseType));
}
}
}

28
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -55,16 +55,21 @@ namespace PackageManagement.Tests.EnvDTE @@ -55,16 +55,21 @@ namespace PackageManagement.Tests.EnvDTE
helper.AddClassToProjectContent(fullName);
}
void AddBaseTypeInterfaceToClass(string fullName, string dotNetName)
void AddInterfaceToClassBaseTypes(string fullName, string dotNetName)
{
helper.AddInterfaceToClassBaseTypes(fakeClass, fullName, dotNetName);
}
void AddBaseTypeClassToClass(string fullName)
void AddClassToClassBaseTypes(string fullName)
{
helper.AddClassToClassBaseTypes(fakeClass, fullName);
}
void AddBaseTypeToClass(string fullName)
{
helper.AddBaseTypeToClass(fakeClass, fullName);
}
[Test]
public void Language_CSharpProject_ReturnsCSharpModelLanguage()
{
@ -116,7 +121,7 @@ namespace PackageManagement.Tests.EnvDTE @@ -116,7 +121,7 @@ namespace PackageManagement.Tests.EnvDTE
{
CreateProjectContent();
CreatePublicClass("MyClass");
AddBaseTypeInterfaceToClass("System.Collections.Generic.ICollection", "System.Collections.Generic.ICollection{System.String}");
AddInterfaceToClassBaseTypes("System.Collections.Generic.ICollection", "System.Collections.Generic.ICollection{System.String}");
CodeElements codeElements = codeClass.ImplementedInterfaces;
CodeInterface codeInterface = codeElements.FirstOrDefault() as CodeInterface;
@ -130,11 +135,26 @@ namespace PackageManagement.Tests.EnvDTE @@ -130,11 +135,26 @@ namespace PackageManagement.Tests.EnvDTE
{
CreateProjectContent();
CreatePublicClass("MyClass");
AddBaseTypeClassToClass("MyNamespace.MyBaseClass");
AddClassToClassBaseTypes("MyNamespace.MyBaseClass");
CodeElements codeElements = codeClass.ImplementedInterfaces;
Assert.AreEqual(0, codeElements.Count);
}
[Test]
public void BaseTypes_ClassBaseTypeIsSystemObject_ReturnsSystemObject()
{
CreateProjectContent();
CreatePublicClass("MyClass");
AddBaseTypeToClass("System.Object");
CodeElements codeElements = codeClass.Bases;
CodeClass2 baseClass = codeElements.FirstOrDefault() as CodeClass2;
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("System.Object", baseClass.FullName);
Assert.AreEqual("Object", baseClass.Name);
}
}
}

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

@ -232,21 +232,34 @@ namespace PackageManagement.Tests.Helpers @@ -232,21 +232,34 @@ namespace PackageManagement.Tests.Helpers
public void AddClassToClassBaseTypes(IClass fakeClass, 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);
IReturnType baseType = CreateBaseType(baseTypeClass, baseTypeFullName, baseTypeDotNetName);
var baseTypes = new List<IReturnType>();
baseTypes.Add(baseType);
fakeClass.Stub(c => c.BaseTypes).Return(baseTypes);
}
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;
}
public void AddClassToClassBaseTypes(IClass fakeClass, string fullName)
{
IClass baseTypeClass = AddClassToProjectContent(fullName);
AddClassToClassBaseTypes(fakeClass, baseTypeClass, fullName, fullName);
}
public void AddBaseTypeToClass(IClass fakeClass, string fullName)
{
IClass baseTypeClass = AddClassToProjectContent(fullName);
IReturnType baseType = CreateBaseType(baseTypeClass, fullName, fullName);
fakeClass.Stub(c => c.BaseType).Return(baseType);
}
}
}

Loading…
Cancel
Save