From 7063203972d2e5f839817aa8449858083507cd3a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 14 Oct 2011 16:18:44 +0200 Subject: [PATCH] FieldDeclaration/EventDeclaration/VariableDeclarationStatement now resolve to 'void'. Only the individual VariableInitializers will resolve to the field/event/variable. Fixed several bugs in 'Find References'. --- .../Resolver/FindReferences.cs | 27 ++++++++++++------- .../Resolver/ResolveVisitor.cs | 25 +++-------------- .../CSDemo.Designer.cs | 1 + 3 files changed, 23 insertions(+), 30 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs b/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs index 0d5bcdc42b..9bc635b21e 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs @@ -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 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) { - 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 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 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 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) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs index d299378a72..0727344450 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs @@ -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 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.VisitVariableInitializer(VariableInitializer variableInitializer, object data) @@ -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 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 diff --git a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs index 079e531e11..64aa9c597e 100644 --- a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs +++ b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs @@ -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;