From 44143f236ce24b2e9e7563eaceb2885782b914fb Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 23 Mar 2013 14:15:49 +0000 Subject: [PATCH] Fix goto definition for MSpec fields in Unit Tests window. --- .../src/MSpecTestMember.cs | 26 +++++++++++++++++-- .../src/MSpecTestProject.cs | 2 +- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs b/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs index 23e2a2b543..c816c2c54e 100644 --- a/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs +++ b/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs @@ -2,7 +2,10 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Windows.Input; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Widgets; using ICSharpCode.UnitTesting; namespace ICSharpCode.MachineSpecifications @@ -11,8 +14,9 @@ namespace ICSharpCode.MachineSpecifications { MSpecTestProject parentProject; string displayName; + IMember member; - public MSpecTestMember(MSpecTestProject parentProject, string displayName) + MSpecTestMember(MSpecTestProject parentProject, string displayName) { this.parentProject = parentProject; this.displayName = displayName; @@ -21,8 +25,9 @@ namespace ICSharpCode.MachineSpecifications public MSpecTestMember( MSpecTestProject parentProject, IMember member) - : this(parentProject, member.DeclaringType.Name + "." + member.Name) + : this(parentProject, member.Name) { + this.member = member; } public override ITestProject ParentProject { @@ -37,5 +42,22 @@ namespace ICSharpCode.MachineSpecifications { this.Result = result.ResultType; } + + public IMember Resolve() + { + ICompilation compilation = SD.ParserService.GetCompilation(parentProject.Project); + return member.UnresolvedMember.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); + } + + public override ICommand GoToDefinition { + get { + return new RelayCommand( + delegate { + IMember member = Resolve(); + if (member != null) + NavigationService.NavigateTo(member); + }); + } + } } } diff --git a/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs b/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs index f8ad8c352b..9882a1d1a4 100644 --- a/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs +++ b/src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs @@ -90,7 +90,7 @@ namespace ICSharpCode.MachineSpecifications IEnumerable GetTestMembers(ITypeDefinition testClass, IEnumerable fields) { - List result = fields.Where(HasItReturnType).Select(field => new MSpecTestMember(this, field.Name)).ToList(); + List result = fields.Where(HasItReturnType).Select(field => new MSpecTestMember(this, field)).ToList(); foreach (IField field in fields) { if (HasBehavesLikeReturnType(field)) { IEnumerable behaviorFields = ResolveBehaviorFieldsOf(field);