Browse Source

[Resolver] Give the value parameter a domregion close to the setter or adder.

Previously the value parameters were given the start and end location (0, 0) which was problematic for the
FindReferences class which uses this information to decide if two variables are the same when finding references.
newNRvisualizers
Simon Lindgren 14 years ago
parent
commit
e60567ab86
  1. 11
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
  2. 3
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

11
ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -855,7 +855,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -855,7 +855,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
for (AstNode node = propertyOrIndexerDeclaration.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == PropertyDeclaration.SetterRole && member != null) {
resolver = resolver.PushBlock();
resolver = resolver.AddVariable(new DefaultParameter(member.ReturnType, "value"));
var setter = node as Accessor;
var setterRegion = setter.Body.GetRegion();
var valueRegion = new DomRegion(setterRegion.BeginLine, setterRegion.BeginColumn,
setterRegion.BeginLine, setterRegion.BeginColumn);
resolver = resolver.AddVariable(new DefaultParameter(member.ReturnType, "value", valueRegion));
Scan(node);
resolver = resolver.PopBlock();
} else {
@ -902,7 +906,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -902,7 +906,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (member != null) {
resolver = resolver.PushBlock();
resolver = resolver.AddVariable(new DefaultParameter(member.ReturnType, "value"));
var adderRegion = eventDeclaration.AddAccessor.Body.GetRegion();
var valueRegion = new DomRegion(adderRegion.BeginLine, adderRegion.BeginColumn,
adderRegion.BeginLine, adderRegion.BeginColumn);
resolver = resolver.AddVariable(new DefaultParameter(member.ReturnType, "value", valueRegion));
ScanChildren(eventDeclaration);
} else {
ScanChildren(eventDeclaration);

3
ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

@ -295,6 +295,7 @@ class Color { @@ -295,6 +295,7 @@ class Color {
LocalResolveResult result = Resolve<LocalResolveResult>(program);
Assert.AreEqual("System.String", result.Type.FullName);
Assert.AreEqual("value", result.Variable.Name);
Assert.AreEqual(new DomRegion(3, 7, 3, 7), result.Variable.Region);
}
[Test]
@ -312,6 +313,7 @@ class Color { @@ -312,6 +313,7 @@ class Color {
LocalResolveResult result = Resolve<LocalResolveResult>(program);
Assert.AreEqual("System.EventHandler", result.Type.FullName);
Assert.AreEqual("value", result.Variable.Name);
Assert.AreEqual(new DomRegion(3, 7, 3, 7), result.Variable.Region);
}
[Test]
@ -328,6 +330,7 @@ class Color { @@ -328,6 +330,7 @@ class Color {
LocalResolveResult result = Resolve<LocalResolveResult>(program);
Assert.AreEqual("System.String", result.Type.FullName);
Assert.AreEqual("value", result.Variable.Name);
Assert.AreEqual(new DomRegion(3, 7, 3, 7), result.Variable.Region);
}
[Test]

Loading…
Cancel
Save