Browse Source

Fix goto definition for MSpec fields in Unit Tests window.

pull/32/merge
Matt Ward 13 years ago
parent
commit
44143f236c
  1. 26
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestMember.cs
  2. 2
      src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs

26
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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Windows.Input;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.UnitTesting; using ICSharpCode.UnitTesting;
namespace ICSharpCode.MachineSpecifications namespace ICSharpCode.MachineSpecifications
@ -11,8 +14,9 @@ namespace ICSharpCode.MachineSpecifications
{ {
MSpecTestProject parentProject; MSpecTestProject parentProject;
string displayName; string displayName;
IMember member;
public MSpecTestMember(MSpecTestProject parentProject, string displayName) MSpecTestMember(MSpecTestProject parentProject, string displayName)
{ {
this.parentProject = parentProject; this.parentProject = parentProject;
this.displayName = displayName; this.displayName = displayName;
@ -21,8 +25,9 @@ namespace ICSharpCode.MachineSpecifications
public MSpecTestMember( public MSpecTestMember(
MSpecTestProject parentProject, MSpecTestProject parentProject,
IMember member) IMember member)
: this(parentProject, member.DeclaringType.Name + "." + member.Name) : this(parentProject, member.Name)
{ {
this.member = member;
} }
public override ITestProject ParentProject { public override ITestProject ParentProject {
@ -37,5 +42,22 @@ namespace ICSharpCode.MachineSpecifications
{ {
this.Result = result.ResultType; 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);
});
}
}
} }
} }

2
src/AddIns/Analysis/MachineSpecifications/MachineSpecifications/src/MSpecTestProject.cs

@ -90,7 +90,7 @@ namespace ICSharpCode.MachineSpecifications
IEnumerable<ITest> GetTestMembers(ITypeDefinition testClass, IEnumerable<IField> fields) IEnumerable<ITest> GetTestMembers(ITypeDefinition testClass, IEnumerable<IField> fields)
{ {
List<MSpecTestMember> result = fields.Where(HasItReturnType).Select(field => new MSpecTestMember(this, field.Name)).ToList(); List<MSpecTestMember> result = fields.Where(HasItReturnType).Select(field => new MSpecTestMember(this, field)).ToList();
foreach (IField field in fields) { foreach (IField field in fields) {
if (HasBehavesLikeReturnType(field)) { if (HasBehavesLikeReturnType(field)) {
IEnumerable<IField> behaviorFields = ResolveBehaviorFieldsOf(field); IEnumerable<IField> behaviorFields = ResolveBehaviorFieldsOf(field);

Loading…
Cancel
Save