diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index 4b80ed21a9..a7b0a9f8fb 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -87,6 +87,8 @@
+
+
@@ -95,6 +97,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs
index 08f7f958fb..af33960fc3 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs
@@ -17,7 +17,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
}
- public vsCMAccess Access {
+ public CodeFunction(IProperty property)
+ : base(property)
+ {
+ }
+
+ public virtual vsCMAccess Access {
get { return GetAccess(); }
set { }
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterFunction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterFunction.cs
new file mode 100644
index 0000000000..667c274a99
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterFunction.cs
@@ -0,0 +1,16 @@
+// 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 CodeGetterFunction : CodeGetterOrSetterFunction
+ {
+ public CodeGetterFunction(IProperty property)
+ : base(property, property.GetterModifiers)
+ {
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterOrSetterFunction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterOrSetterFunction.cs
new file mode 100644
index 0000000000..f23ae2c603
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterOrSetterFunction.cs
@@ -0,0 +1,29 @@
+// 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 CodeGetterOrSetterFunction : CodeFunction
+ {
+ ModifierEnum modifier;
+
+ public CodeGetterOrSetterFunction(IProperty property, ModifierEnum modifier)
+ : base(property)
+ {
+ this.modifier = modifier;
+ }
+
+ public override vsCMAccess Access {
+ get {
+ if (modifier == ModifierEnum.None) {
+ return base.Access;
+ }
+ return vsCMAccess.vsCMAccessPrivate;
+ }
+ set { }
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
index 23c70cad8a..31fa71bb69 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
@@ -8,8 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeProperty : CodeElement
{
- CodeElements attributes;
-
public CodeProperty()
{
}
@@ -32,12 +30,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual CodeElements Attributes {
- get {
- if (attributes == null) {
- attributes = new CodeAttributes(Property);
- }
- return attributes;
- }
+ get { return new CodeAttributes(Property); }
}
public virtual CodeTypeRef Type {
@@ -45,11 +38,27 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual CodeFunction Getter {
- get { throw new NotImplementedException(); }
+ get { return GetGetter(); }
+ }
+
+ CodeFunction GetGetter()
+ {
+ if (Property.CanGet) {
+ return new CodeGetterFunction(Property);
+ }
+ return null;
}
public virtual CodeFunction Setter {
- get { throw new NotImplementedException(); }
+ get { return GetSetter(); }
+ }
+
+ CodeFunction GetSetter()
+ {
+ if (Property.CanSet) {
+ return new CodeSetterFunction(Property);
+ }
+ return null;
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeSetterFunction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeSetterFunction.cs
new file mode 100644
index 0000000000..f34b51a81e
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeSetterFunction.cs
@@ -0,0 +1,16 @@
+// 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 CodeSetterFunction : CodeGetterOrSetterFunction
+ {
+ public CodeSetterFunction(IProperty property)
+ : base(property, property.SetterModifiers)
+ {
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 69d15dc3b5..d239dec577 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -88,7 +88,7 @@
-
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
index da4b359a37..1318e295a7 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
@@ -120,5 +120,125 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(vsCMPropertyKind.vsCMPropertyKindWriteOnly, kind);
}
+
+ [Test]
+ public void Parameters_PropertyIsIndexerWithOneParameter_ReturnsOneParameter()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ helper.AddParameterToProperty("item");
+ CreateCodeProperty2();
+
+ CodeElements parameters = property.Parameters;
+ CodeParameter parameter = parameters.FirstCodeParameterOrDefault();
+
+ Assert.AreEqual(1, parameters.Count);
+ Assert.AreEqual("item", parameter.Name);
+ }
+
+ [Test]
+ public void Getter_PublicGetter_ReturnsPublicGetterCodeFunction()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ helper.HasGetterOnly();
+ helper.GetterModifierIsNone();
+ CreateCodeProperty2();
+
+ CodeFunction getter = property.Getter;
+ vsCMAccess access = getter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPublic, access);
+ }
+
+ [Test]
+ public void Getter_PrivateGetter_ReturnsPrivateGetterCodeFunction()
+ {
+ helper.CreatePrivateProperty("MyProperty");
+ helper.HasGetterOnly();
+ helper.GetterModifierIsNone();
+ CreateCodeProperty2();
+
+ CodeFunction getter = property.Getter;
+ vsCMAccess access = getter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access);
+ }
+
+ [Test]
+ public void Getter_NoGetter_ReturnsNull()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ CreateCodeProperty2();
+
+ CodeFunction getter = property.Getter;
+
+ Assert.IsNull(getter);
+ }
+
+ [Test]
+ public void Getter_PublicPropertyButPrivateGetter_ReturnsPrivateGetterCodeFunction()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ helper.HasGetterAndSetter();
+ helper.GetterModifierIsPrivate();
+ CreateCodeProperty2();
+
+ CodeFunction getter = property.Getter;
+ vsCMAccess access = getter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access);
+ }
+
+ [Test]
+ public void Setter_PublicSetter_ReturnsPublicSetterCodeFunction()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ helper.HasSetterOnly();
+ helper.SetterModifierIsNone();
+ CreateCodeProperty2();
+
+ CodeFunction setter = property.Setter;
+ vsCMAccess access = setter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPublic, access);
+ }
+
+ [Test]
+ public void Setter_PrivateSetter_ReturnsPrivateSetterCodeFunction()
+ {
+ helper.CreatePrivateProperty("MyProperty");
+ helper.HasSetterOnly();
+ helper.SetterModifierIsNone();
+ CreateCodeProperty2();
+
+ CodeFunction setter = property.Setter;
+ vsCMAccess access = setter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access);
+ }
+
+ [Test]
+ public void Setter_NoSetter_ReturnsNull()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ CreateCodeProperty2();
+
+ CodeFunction setter = property.Setter;
+
+ Assert.IsNull(setter);
+ }
+
+ [Test]
+ public void Setter_PublicPropertyButPrivateSetter_ReturnsPrivateSetterCodeFunction()
+ {
+ helper.CreatePublicProperty("MyProperty");
+ helper.HasGetterAndSetter();
+ helper.SetterModifierIsPrivate();
+ CreateCodeProperty2();
+
+ CodeFunction setter = property.Setter;
+ vsCMAccess access = setter.Access;
+
+ Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs
deleted file mode 100644
index 83bdc6d784..0000000000
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/CodeElementsHelpers.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// 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 System.Collections.Generic;
-using System.Linq;
-using ICSharpCode.PackageManagement.EnvDTE;
-
-namespace PackageManagement.Tests.Helpers
-{
- public static class CodeElementsHelpers
- {
- public static List ToList(this CodeElements codeElements)
- {
- var list = new List();
- foreach (CodeElement codeElement in codeElements) {
- list.Add(codeElement);
- }
- return list;
- }
-
- public static CodeElement FirstOrDefault(this CodeElements codeElements)
- {
- return ToList(codeElements).FirstOrDefault();
- }
-
- public static CodeFunction FirstCodeFunctionOrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeFunction;
- }
-
- public static CodeClass2 FirstCodeClass2OrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeClass2;
- }
-
- public static CodeInterface FirstCodeInterfaceOrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeInterface;
- }
-
- public static CodeAttributeArgument FirstCodeAttributeArgumentOrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeAttributeArgument;
- }
-
- public static CodeNamespace FirstCodeNamespaceOrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeNamespace;
- }
-
- public static CodeNamespace LastCodeNamespaceOrDefault(this CodeElements codeElements)
- {
- return codeElements.LastOrDefault() as CodeNamespace;
- }
-
- public static CodeElement LastOrDefault(this CodeElements codeElements)
- {
- return codeElements.ToList().LastOrDefault();
- }
-
- public static CodeAttribute2 FirstCodeAttribute2OrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeAttribute2;
- }
-
- public static CodeProperty2 FirstCodeProperty2OrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeProperty2;
- }
-
- public static CodeVariable FirstCodeVariableOrDefault(this CodeElements codeElements)
- {
- return codeElements.FirstOrDefault() as CodeVariable;
- }
- }
-}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
index a054fa2c3f..876280b4bf 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs
@@ -11,9 +11,11 @@ namespace PackageManagement.Tests.Helpers
public class PropertyHelper
{
public IProperty Property;
- public List Attributes = new List();
public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper();
+ List attributes = new List();
+ List parameters = new List();
+
///
/// Property name should include class prefix (e.g. "Class1.MyProperty")
///
@@ -21,7 +23,8 @@ namespace PackageManagement.Tests.Helpers
{
Property = MockRepository.GenerateMock();
Property.Stub(p => p.FullyQualifiedName).Return(fullyQualifiedName);
- Property.Stub(p => p.Attributes).Return(Attributes);
+ Property.Stub(p => p.Attributes).Return(attributes);
+ Property.Stub(p => p.Parameters).Return(parameters);
Property.Stub(p => p.ProjectContent).Return(ProjectContentHelper.FakeProjectContent);
}
@@ -29,7 +32,7 @@ namespace PackageManagement.Tests.Helpers
{
var attributeHelper = new AttributeHelper();
attributeHelper.CreateAttribute(fullName, shortName);
- Attributes.Add(attributeHelper.Attribute);
+ attributes.Add(attributeHelper.Attribute);
}
public void AddParentClass(string className)
@@ -76,5 +79,40 @@ namespace PackageManagement.Tests.Helpers
HasGetter = false;
HasSetter = true;
}
+
+ public void AddParameterToProperty(string name)
+ {
+ IParameter parameter = MockRepository.GenerateStub();
+ parameter.Stub(p => p.Name).Return(name);
+ parameters.Add(parameter);
+ }
+
+ public void GetterModifierIsPrivate()
+ {
+ GetterModifier = ModifierEnum.Private;
+ }
+
+ ModifierEnum GetterModifier {
+ set { Property.Stub(p => p.GetterModifiers).Return(value); }
+ }
+
+ public void GetterModifierIsNone()
+ {
+ GetterModifier = ModifierEnum.None;
+ }
+
+ public void SetterModifierIsPrivate()
+ {
+ SetterModifier = ModifierEnum.Private;
+ }
+
+ ModifierEnum SetterModifier {
+ set { Property.Stub(p => p.SetterModifiers).Return(value); }
+ }
+
+ public void SetterModifierIsNone()
+ {
+ GetterModifier = ModifierEnum.None;
+ }
}
}