diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs index 855ea683d9..20c9dab909 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs @@ -46,16 +46,17 @@ namespace ICSharpCode.PackageManagement.EnvDTE public virtual global::EnvDTE.CodeVariable AddVariable(string name, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic, object Location = null) { - var fieldTypeName = new FullTypeName((string)type); - var td = typeModel.Resolve(); - if (td == null) - return null; - IType fieldType = td.Compilation.FindType(fieldTypeName); - context.CodeGenerator.AddField(td, Access.ToAccessibility(), fieldType, name); - var fieldModel = typeModel.Members.OfType().FirstOrDefault(f => f.Name == name); - if (fieldModel != null) { - return new CodeVariable(context, fieldModel); - } +// var fieldTypeName = new FullTypeName((string)type); +// var typeDefinition = typeModel.Resolve(); +// if (typeDefinition == null) +// return null; +// +// IType fieldType = typeDefinition.Compilation.FindType(fieldTypeName); +// context.CodeGenerator.AddField(typeDefinition, Access.ToAccessibility(), fieldType, name); +// var fieldModel = typeModel.Members.OfType().FirstOrDefault(f => f.Name == name); +// if (fieldModel != null) { +// return new CodeVariable(context, fieldModel); +// } return null; } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs index 1bce7854e2..f5fc0d14dd 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE { switch (m.SymbolKind) { case SymbolKind.Field: - return new CodeVariable(context, (IFieldModel)m); + return new CodeVariable(context, m.Resolve() as IField); case SymbolKind.Property: case SymbolKind.Indexer: // return new CodeProperty2(m); @@ -76,16 +76,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE // default is vsCMPart.vsCMPartWholeWithAttributes public virtual global::EnvDTE.TextPoint GetStartPoint() { -// if (symbolModel != null) -// return TextPoint.CreateStartPoint(context, symbolModel.Region); - return null; + return TextPoint.CreateStartPoint(context, entity.Region); } public virtual global::EnvDTE.TextPoint GetEndPoint() { -// if (symbolModel != null) -// return TextPoint.CreateEndPoint(context, symbolModel.Region); - return null; + return TextPoint.CreateEndPoint(context, entity.Region); } public virtual global::EnvDTE.vsCMInfoLocation InfoLocation { get; protected set; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs index b37a8a78a9..9e24e1edf2 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs @@ -2,19 +2,20 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop.Dom; namespace ICSharpCode.PackageManagement.EnvDTE { public class CodeVariable : CodeElement, global::EnvDTE.CodeVariable { - readonly IFieldModel field; + readonly IField field; public CodeVariable() { } - public CodeVariable(CodeModelContext context, IFieldModel field) + public CodeVariable(CodeModelContext context, IField field) : base(context, field) { this.field = field; @@ -26,12 +27,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public global::EnvDTE.vsCMAccess Access { get { return field.Accessibility.ToAccess(); } - set { - var f = field.Resolve(); - if (f != null) { - context.CodeGenerator.ChangeAccessibility(f, value.ToAccessibility()); - } - } + set { } } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index b950f9bf6a..de5318c7a7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -122,7 +122,6 @@ - diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs index d5bb048b26..4232dacb39 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeVariableTests.cs @@ -1,140 +1,107 @@ -//// 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; -//using Rhino.Mocks; -// -//namespace PackageManagement.Tests.EnvDTE -//{ -// [TestFixture] -// public class CodeVariableTests -// { -// CodeVariable codeVariable; -// FieldHelper helper; -// -// [SetUp] -// public void Init() -// { -// helper = new FieldHelper(); -// } -// -// void CreatePublicVariable(string name) -// { -// helper.CreatePublicField(name); -// CreateVariable(); -// } -// -// void CreatePrivateVariable(string name) -// { -// helper.CreatePrivateField(name); -// CreateVariable(); -// } -// -// void CreateVariable() -// { -// codeVariable = new CodeVariable(helper.Field); -// } -// -// void VariableStartsAtColumn(int column) -// { -// helper.VariableStartsAtColumn(column); -// } -// -// void VariableStartsAtLine(int line) -// { -// helper.VariableStartsAtLine(line); -// } -// -// void VariableEndsAtColumn(int column) -// { -// helper.VariableEndsAtColumn(column); -// } -// -// void VariableEndsAtLine(int line) -// { -// helper.VariableEndsAtLine(line); -// } -// -// [Test] -// public void Access_PublicVariable_ReturnsPublic() -// { -// CreatePublicVariable("MyVariable"); -// -// global::EnvDTE.vsCMAccess access = codeVariable.Access; -// -// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access); -// } -// -// [Test] -// public void Access_PrivateVariable_ReturnsPrivate() -// { -// CreatePrivateVariable("MyVariable"); -// -// global::EnvDTE.vsCMAccess access = codeVariable.Access; -// -// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access); -// } -// -// [Test] -// public void GetStartPoint_VariableStartsAtColumn5_ReturnsTextPointWithLineCharOffset5() -// { -// CreatePublicVariable("MyVariable"); -// VariableStartsAtColumn(5); -// -// global::EnvDTE.TextPoint point = codeVariable.GetStartPoint(); -// int offset = point.LineCharOffset; -// -// Assert.AreEqual(5, offset); -// } -// -// [Test] -// public void GetStartPoint_VariableStartsAtLine1_ReturnsTextPointWithLine1() -// { -// CreatePublicVariable("MyVariable"); -// VariableStartsAtLine(1); -// -// global::EnvDTE.TextPoint point = codeVariable.GetStartPoint(); -// int line = point.Line; -// -// Assert.AreEqual(1, line); -// } -// -// [Test] -// public void GetEndPoint_VariableEndsAtColumn10_ReturnsTextPointWithLineCharOffset10() -// { -// CreatePublicVariable("MyVariable"); -// VariableEndsAtColumn(10); -// -// global::EnvDTE.TextPoint point = codeVariable.GetEndPoint(); -// int offset = point.LineCharOffset; -// -// Assert.AreEqual(10, offset); -// } -// -// [Test] -// public void GetEndPoint_VariableEndsAtLine2_ReturnsTextPointWithLine2() -// { -// CreatePublicVariable("MyVariable"); -// VariableEndsAtLine(2); -// -// global::EnvDTE.TextPoint point = codeVariable.GetEndPoint(); -// int line = point.Line; -// -// Assert.AreEqual(2, line); -// } -// -// [Test] -// public void Kind_PublicVariable_ReturnsVariable() -// { -// CreatePublicVariable("MyVariable"); -// -// global::EnvDTE.vsCMElement kind = codeVariable.Kind; -// -// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementVariable, kind); -// } -// } -//} +// 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.Linq; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.PackageManagement.EnvDTE; +using ICSharpCode.SharpDevelop.Dom; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; +using Rhino.Mocks; + +namespace PackageManagement.Tests.EnvDTE +{ + [TestFixture] + public class CodeVariableTests : CodeModelTestBase + { + CodeVariable codeVariable; + + void CreateCodeVariable(string code) + { + AddCodeFile("class.cs", code); + ITypeDefinition typeDefinition = assemblyModel.TopLevelTypeDefinitions.Single().Resolve(); + codeVariable = new CodeVariable(codeModelContext, typeDefinition.Fields.First()); + } + + [Test] + public void Access_PublicVariable_ReturnsPublic() + { + CreateCodeVariable( + "public class MyClass {\r\n" + + " public int MyVariable;\r\n" + + "}"); + + global::EnvDTE.vsCMAccess access = codeVariable.Access; + + Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access); + } + + [Test] + public void Access_PrivateVariable_ReturnsPrivate() + { + CreateCodeVariable( + "public class MyClass {\r\n" + + " private int MyVariable;\r\n" + + "}"); + + global::EnvDTE.vsCMAccess access = codeVariable.Access; + + Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access); + } + + [Test] + public void GetStartPoint_VariableStartsAtColumnOneOnLineTwo_ReturnsTextPointWithLineCharOffsetOneAndLineTwo() + { + CreateCodeVariable( + "public class Foo {\r\n" + + "int V;\r\n" + + "}"); + + global::EnvDTE.TextPoint point = codeVariable.GetStartPoint(); + + Assert.AreEqual(1, point.LineCharOffset); + Assert.AreEqual(2, point.Line); + } + + [Test] + public void GetEndPoint_VariableEndsAtColumnSevenOnLineTwo_ReturnsTextPointWithLineCharOffsetSevenOnLineTwo() + { + CreateCodeVariable( + "public class Foo {\r\n" + + "int V;\r\n" + + "}"); + + global::EnvDTE.TextPoint point = codeVariable.GetEndPoint(); + + Assert.AreEqual(7, point.LineCharOffset); + Assert.AreEqual(2, point.Line); + } + + [Test] + public void Kind_PublicVariable_ReturnsVariable() + { + CreateCodeVariable( + "public class MyClass {\r\n" + + " private int MyVariable;\r\n" + + "}"); + + global::EnvDTE.vsCMElement kind = codeVariable.Kind; + + Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementVariable, kind); + } + + [Test] + public void GetEndPoint_VariableHasSpaceBeforeSemiColon_ReturnsTextPointThatIncludesSemiColon() + { + CreateCodeVariable( + "public class Foo {\r\n" + + "int V ;\r\n" + + "}"); + + global::EnvDTE.TextPoint point = codeVariable.GetEndPoint(); + + Assert.AreEqual(8, point.LineCharOffset); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs deleted file mode 100644 index 9779357c44..0000000000 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FieldHelper.cs +++ /dev/null @@ -1,75 +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 ICSharpCode.PackageManagement; -//using ICSharpCode.SharpDevelop.Dom; -//using Rhino.Mocks; -// -//namespace PackageManagement.Tests.Helpers -//{ -// public class FieldHelper -// { -// public IField Field; -// public ProjectContentHelper ProjectContentHelper = new ProjectContentHelper(); -// -// /// -// /// Field name should include the class prefix (e.g. "Class1.MyField") -// /// -// public void CreateField(string fullyQualifiedName) -// { -// Field = MockRepository.GenerateMock(); -// Field.Stub(f => f.ProjectContent).Return(ProjectContentHelper.ProjectContent); -// Field.Stub(f => f.FullyQualifiedName).Return(fullyQualifiedName); -// } -// -// public void CreatePublicField(string fullyQualifiedName) -// { -// CreateField(fullyQualifiedName); -// Field.Stub(f => f.IsPublic).Return(true); -// } -// -// public void CreatePrivateField(string fullyQualifiedName) -// { -// CreateField(fullyQualifiedName); -// Field.Stub(f => f.IsPublic).Return(false); -// Field.Stub(f => f.IsPrivate).Return(true); -// } -// -// public void SetRegion(DomRegion region) -// { -// Field.Stub(f => f.Region).Return(region); -// } -// -// public void VariableStartsAtColumn(int column) -// { -// var region = new DomRegion(1, column); -// SetRegion(region); -// } -// -// public void VariableStartsAtLine(int line) -// { -// var region = new DomRegion(line, 1); -// SetRegion(region); -// } -// -// public void VariableEndsAtColumn(int column) -// { -// var region = new DomRegion(1, 1, 1, column); -// SetRegion(region); -// } -// -// public void VariableEndsAtLine(int line) -// { -// var region = new DomRegion(1, 1, line, 1); -// SetRegion(region); -// } -// -// public void SetCompilationUnitFileName(string fileName) -// { -// var helper = new CompilationUnitHelper(); -// helper.SetFileName(fileName); -// Field.Stub(f => f.CompilationUnit).Return(helper.CompilationUnit); -// } -// } -//}