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

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

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

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

@ -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.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.HideSelection = false;
this.csharpCodeTextBox.Location = new System.Drawing.Point(0, 0); this.csharpCodeTextBox.Location = new System.Drawing.Point(0, 0);
this.csharpCodeTextBox.MaxLength = 99999999;
this.csharpCodeTextBox.Multiline = true; this.csharpCodeTextBox.Multiline = true;
this.csharpCodeTextBox.Name = "csharpCodeTextBox"; this.csharpCodeTextBox.Name = "csharpCodeTextBox";
this.csharpCodeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.csharpCodeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;

Loading…
Cancel
Save