Browse Source

FieldDeclaration/EventDeclaration/VariableDeclarationStatement now resolve to 'void'.

Only the individual VariableInitializers will resolve to the field/event/variable.

Fixed several bugs in 'Find References'.
newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
7063203972
  1. 27
      ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs
  2. 25
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
  3. 1
      ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs

27
ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

@ -360,7 +360,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -360,7 +360,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (searchTerm == null && node is PrimitiveType)
return true;
return node is TypeDeclaration;
return node is TypeDeclaration || node is DelegateDeclaration;
}
internal override bool IsMatch(ResolveResult rr)
@ -418,7 +418,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -418,7 +418,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
internal override bool CanMatch(AstNode node)
{
return node is FieldDeclaration || node is VariableInitializer || base.CanMatch(node);
if (node is VariableInitializer) {
return node.Parent is FieldDeclaration;
}
return base.CanMatch(node);
}
}
@ -454,7 +457,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -454,7 +457,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
internal override bool CanMatch(AstNode node)
{
return node is EventDeclaration || base.CanMatch(node);
if (node is VariableInitializer) {
return node.Parent is EventDeclaration;
}
return node is CustomEventDeclaration || base.CanMatch(node);
}
}
#endregion
@ -481,6 +487,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -481,6 +487,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return new FindMethodReferences(method, typeof(QueryOrdering));
case "GroupBy":
return new FindMethodReferences(method, typeof(QueryGroupClause));
case "Invoke":
if (method.DeclaringTypeDefinition != null && method.DeclaringTypeDefinition.Kind == TypeKind.Delegate)
return new FindMethodReferences(method, typeof(InvocationExpression));
else
return new FindMethodReferences(method);
default:
return new FindMethodReferences(method);
}
@ -501,6 +512,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -501,6 +512,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
internal override bool CanMatch(AstNode node)
{
if (specialNodeType != null && node.GetType() == specialNodeType)
return true;
InvocationExpression ie = node as InvocationExpression;
if (ie != null) {
Expression target = ResolveVisitor.UnpackParenthesizedExpression(ie.Target);
@ -517,12 +531,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -517,12 +531,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (pre != null)
return pre.MemberName == method.Name;
}
if (node is MethodDeclaration)
return true;
if (specialNodeType != null)
return specialNodeType.IsInstanceOfType(node);
else
return false;
return node is MethodDeclaration;
}
internal override bool IsMatch(ResolveResult rr)

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

@ -579,7 +579,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -579,7 +579,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
ResolveResult VisitFieldOrEventDeclaration(AttributedNode fieldOrEventDeclaration)
{
int initializerCount = fieldOrEventDeclaration.GetChildrenByRole(FieldDeclaration.Roles.Variable).Count;
ResolveResult result = null;
for (AstNode node = fieldOrEventDeclaration.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == FieldDeclaration.Roles.Variable) {
if (resolver.CurrentTypeDefinition != null) {
@ -591,18 +590,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -591,18 +590,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
resolver.CurrentMember = members.FirstOrDefault(f => f.Region.IsInside(node.StartLocation));
}
if (resolverEnabled && initializerCount == 1) {
result = Resolve(node);
} else {
Scan(node);
}
Scan(node);
resolver.CurrentMember = null;
} else {
Scan(node);
}
}
return result;
return voidResult;
}
ResolveResult IAstVisitor<object, ResolveResult>.VisitVariableInitializer(VariableInitializer variableInitializer, object data)
@ -2478,15 +2473,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -2478,15 +2473,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
result = new LocalResolveResult(v, type.Resolve(resolver.Context));
StoreResult(vi, result);
}
return result;
} else {
return null;
}
} else {
ITypeReference type = MakeTypeReference(variableDeclarationStatement.Type);
int initializerCount = variableDeclarationStatement.Variables.Count;
ResolveResult result = null;
for (AstNode node = variableDeclarationStatement.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == VariableDeclarationStatement.Roles.Variable) {
VariableInitializer vi = (VariableInitializer)node;
@ -2496,18 +2486,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -2496,18 +2486,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
cv = TypeSystemConvertVisitor.ConvertConstantValue(type, vi.Initializer, resolver.CurrentTypeDefinition, resolver.CurrentMember as IMethod, resolver.CurrentUsingScope);
}
resolver.AddVariable(type, MakeRegion(vi), vi.Name, cv);
if (resolverEnabled && initializerCount == 1) {
result = Resolve(node);
} else {
Scan(node);
}
} else {
Scan(node);
}
Scan(node);
}
return result;
}
return voidResult;
}
#endregion

1
ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs generated

@ -89,6 +89,7 @@ namespace ICSharpCode.NRefactory.Demo @@ -89,6 +89,7 @@ namespace ICSharpCode.NRefactory.Demo
this.csharpCodeTextBox.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.csharpCodeTextBox.HideSelection = false;
this.csharpCodeTextBox.Location = new System.Drawing.Point(0, 0);
this.csharpCodeTextBox.MaxLength = 99999999;
this.csharpCodeTextBox.Multiline = true;
this.csharpCodeTextBox.Name = "csharpCodeTextBox";
this.csharpCodeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;

Loading…
Cancel
Save