Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit af1e958

Browse files
committed
Update to NRefactory commit b880fc6.
b880fc6 Fix possible NullReferenceException in XmlDocIssue.GatherVisitor.CheckXmlDoc() 9f6b757 Fix potential NullReferenceException in RedundantExtendsListEntryIssue f73c7c0 Fix NullReferenceException in RedundantThisQualifierIssue. 3d2fb77 Fix possible ArgumentNullException in CS0169FieldIsNeverUsedIssue and related issues. e8e5240 Fix ArgumentOutOfRangeException in ResolveVisitor.VisitArrayCreateExpression(). 3082317 Fix NullReferenceException in AddArgumentNameAction. b92f505 Fix NullReferenceException in NullAnalysisVisitor.VisitObjectCreateExpression 72d62f6 Guard ikvm loader against null namespaces. ef6b76e Fix NullReferenceException in OwnedParameterReference.Resolve. dcaa3a2 Fix constant folding for binary operators on enum values if mscorlib isn't loaded. 2c8646d Suppress ExplicitConversionInForEachIssue if variable has unknown type. 1ae6ba2 Fixed bug in CopyCommentsFromInterface 9deefa8 Fixed potiental crash in ConvertImplicitToExplicitImplementationAction c5ca3ac Fixed add imports bug. 721ce12 Filter out synthetic types in import items. 909088b Ignored failing unit test. 75c6ad3 AlignEmbeddedIf/Using statement is now AlignEmbeddedStatements & works now with embedded lock statements as well.
1 parent cc04f8f commit af1e958

32 files changed

Lines changed: 272 additions & 132 deletions

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddArgumentNameAction.cs

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,20 @@
2323
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
26+
27+
using System;
28+
using System.Collections.Generic;
2629
using ICSharpCode.NRefactory.TypeSystem;
2730
using ICSharpCode.NRefactory.CSharp;
2831
using ICSharpCode.NRefactory.Semantics;
29-
using ICSharpCode.NRefactory.Refactoring;
3032
using System.Linq;
31-
using System.Text;
3233
using ICSharpCode.NRefactory.CSharp.Resolver;
3334

3435
namespace ICSharpCode.NRefactory.CSharp.Refactoring
3536
{
3637
/// <summary>
3738
/// Add name for argument
3839
/// </summary>
39-
using System;
40-
using System.Collections.Generic;
41-
4240
[ContextAction("Add name for argument", Description = "Add name for argument including method, indexer invocation and Attibute Usage")]
4341
public class AddArgumentNameAction : SpecializedCodeAction<Expression>
4442
{
@@ -73,12 +71,13 @@ protected override CodeAction GetAction(RefactoringContext context, Expression e
7371
if (!(parent is CSharp.Attribute) && !(parent is IndexerExpression) && !(parent is InvocationExpression))
7472
return null;
7573

76-
if (parent is CSharp.Attribute) {
77-
var resolvedResult = context.Resolve(parent as CSharp.Attribute);
78-
if (resolvedResult.IsError)
74+
var attribute = parent as CSharp.Attribute;
75+
if (attribute != null) {
76+
var resolvedResult = context.Resolve(attribute) as CSharpInvocationResolveResult;
77+
if (resolvedResult == null || resolvedResult.IsError)
7978
return null;
80-
var arguments = (parent as CSharp.Attribute).Arguments;
81-
IMember member = (resolvedResult as CSharpInvocationResolveResult).Member;
79+
var arguments = attribute.Arguments;
80+
IMember member = resolvedResult.Member;
8281

8382
int index = 0;
8483
int temp = 0;
@@ -97,30 +96,31 @@ protected override CodeAction GetAction(RefactoringContext context, Expression e
9796
if (method == null || method.Parameters.Count == 0 || method.Parameters.Last().IsParams)
9897
return null;
9998

100-
var parameterMap = (resolvedResult as CSharpInvocationResolveResult).GetArgumentToParameterMap();
99+
var parameterMap = resolvedResult.GetArgumentToParameterMap();
101100
var parameters = method.Parameters;
102101
if (index >= parameterMap.Count)
103102
return null;
104-
var name = parameters.ElementAt(parameterMap [index]).Name;
103+
var name = parameters[parameterMap[index]].Name;
105104
return new CodeAction(string.Format(context.TranslateString("Add argument name '{0}'"), name), script => {
106105
for (int i = 0; i < nodes.Count; i++) {
107106
int p = index + i;
108107
if (p >= parameterMap.Count)
109108
break;
110-
name = parameters.ElementAt(parameterMap [p]).Name;
109+
name = parameters[parameterMap[p]].Name;
111110
var namedArgument = new NamedArgumentExpression(name, arguments.ElementAt(p).Clone());
112111
script.Replace(arguments.ElementAt(p), namedArgument);
113112
}},
114113
expression
115114
);
116115
}
117116

118-
if (parent is IndexerExpression) {
119-
var resolvedResult = context.Resolve(parent as IndexerExpression);
120-
if (resolvedResult.IsError)
117+
var indexerExpression = parent as IndexerExpression;
118+
if (indexerExpression != null) {
119+
var resolvedResult = context.Resolve(indexerExpression) as CSharpInvocationResolveResult;
120+
if (resolvedResult == null || resolvedResult.IsError)
121121
return null;
122-
var arguments = (parent as IndexerExpression).Arguments;
123-
IMember member = (resolvedResult as CSharpInvocationResolveResult).Member;
122+
var arguments = indexerExpression.Arguments;
123+
IMember member = resolvedResult.Member;
124124

125125
int index = 0;
126126
int temp = 0;
@@ -139,30 +139,31 @@ protected override CodeAction GetAction(RefactoringContext context, Expression e
139139
if (property == null || property.Parameters.Count == 0 || property.Parameters.Last().IsParams) {
140140
return null;
141141
}
142-
var parameterMap = (resolvedResult as CSharpInvocationResolveResult).GetArgumentToParameterMap();
142+
var parameterMap = resolvedResult.GetArgumentToParameterMap();
143143
var parameters = property.Parameters;
144144
if (index >= parameterMap.Count)
145145
return null;
146-
var name = parameters.ElementAt(parameterMap [index]).Name;
146+
var name = parameters[parameterMap[index]].Name;
147147
return new CodeAction(string.Format(context.TranslateString("Add argument name '{0}'"), name), script => {
148148
for (int i = 0; i< nodes.Count; i++) {
149149
int p = index + i;
150150
if (p >= parameterMap.Count)
151151
break;
152-
name = parameters.ElementAt(parameterMap [p]).Name;
152+
name = parameters[parameterMap[p]].Name;
153153
var namedArgument = new NamedArgumentExpression(name, arguments.ElementAt(p).Clone());
154154
script.Replace(arguments.ElementAt(p), namedArgument);
155155
}},
156156
expression
157157
);
158158
}
159159

160-
if (parent is InvocationExpression) {
161-
var resolvedResult = context.Resolve(parent as InvocationExpression);
162-
if (resolvedResult.IsError)
160+
var invocationExpression = parent as InvocationExpression;
161+
if (invocationExpression != null) {
162+
var resolvedResult = context.Resolve(invocationExpression) as CSharpInvocationResolveResult;
163+
if (resolvedResult == null || resolvedResult.IsError)
163164
return null;
164-
var arguments = (parent as InvocationExpression).Arguments;
165-
IMember member = (resolvedResult as CSharpInvocationResolveResult).Member;
165+
var arguments = invocationExpression.Arguments;
166+
IMember member = resolvedResult.Member;
166167

167168
int index = 0;
168169
int temp = 0;
@@ -186,13 +187,13 @@ protected override CodeAction GetAction(RefactoringContext context, Expression e
186187
var parameters = method.Parameters;
187188
if (index >= parameterMap.Count)
188189
return null;
189-
var name = parameters.ElementAt(parameterMap [index]).Name;
190+
var name = parameters[parameterMap[index]].Name;
190191
return new CodeAction(string.Format(context.TranslateString("Add argument name '{0}'"), name), script => {
191192
for (int i = 0; i< nodes.Count; i++) {
192193
int p = index + i;
193194
if (p >= parameterMap.Count)
194195
break;
195-
name = parameters.ElementAt(parameterMap [p]).Name;
196+
name = parameters[parameterMap[p]].Name;
196197
var namedArgument = new NamedArgumentExpression(name, arguments.ElementAt(p).Clone());
197198
script.Replace(arguments.ElementAt(p), namedArgument);
198199
}},

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ protected override CodeAction GetAction (RefactoringContext context, MethodDecla
4141
if (!node.NameToken.Contains (context.Location))
4242
return null;
4343

44-
var method = (IMethod)((MemberResolveResult)context.Resolve (node)).Member;
45-
if (method.ImplementedInterfaceMembers.Count != 1 || method.DeclaringType.Kind == TypeKind.Interface)
44+
var memberResolveResult = context.Resolve(node) as MemberResolveResult;
45+
if (memberResolveResult == null)
46+
return null;
47+
var method = memberResolveResult.Member as IMethod;
48+
if (method == null || method.ImplementedInterfaceMembers.Count != 1 || method.DeclaringType.Kind == TypeKind.Interface)
4649
return null;
4750

4851
return new CodeAction (context.TranslateString ("Convert implict to explicit implementation"),

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromInterface.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,11 @@ protected override CodeAction GetAction(RefactoringContext context, MethodDeclar
4646
if (!node.NameToken.Contains(context.Location))
4747
return null;
4848

49-
var method = (IMethod)((MemberResolveResult)context.Resolve(node)).Member;
50-
51-
if (method.Documentation != null)
49+
var memberResolveResult = context.Resolve(node) as MemberResolveResult;
50+
if (memberResolveResult == null)
51+
return null;
52+
var method = memberResolveResult.Member as IMethod;
53+
if (method == null || method.Documentation != null)
5254
return null;
5355

5456
IList<IMember> interfaceMethods = method.ImplementedInterfaceMembers;

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
8585
if (def != null && def.KnownTypeCode == KnownTypeCode.None) {
8686
// user-defined value type -- might be mutable
8787
continue;
88-
} else if (ctx.Resolve (variable.Initializer) is ConstantResolveResult) {
88+
} else if (ctx.Resolve (variable.Initializer).IsCompileTimeConstant) {
8989
// handled by ConvertToConstantIssue
9090
continue;
9191
}
9292
}
9393

9494
var mr = ctx.Resolve(variable) as MemberResolveResult;
95-
if (mr == null)
95+
if (mr == null || !(mr.Member is IVariable))
9696
continue;
97-
list.Add(Tuple.Create(variable, mr.Member as IVariable));
97+
list.Add(Tuple.Create(variable, (IVariable)mr.Member));
9898
}
9999
base.VisitTypeDeclaration(typeDeclaration);
100100
Collect();

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/XmlDocIssue.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ void CheckXmlDoc(AstNode node)
168168
var name = el.Attributes.FirstOrDefault(attr => attr.Name == "name");
169169
if (name == null)
170170
break;
171-
if (member.SymbolKind == SymbolKind.TypeDefinition) {
171+
if (member != null && member.SymbolKind == SymbolKind.TypeDefinition) {
172172
var type = (ITypeDefinition)member;
173173
if (!type.TypeArguments.Any(arg => arg.Name == name.Value)) {
174174
AddXmlIssue(name.ValueSegment.Offset - firstline.Length + 1, name.ValueSegment.Length - 2, string.Format(ctx.TranslateString("Type parameter '{0}' not found"), name.Value));
@@ -183,7 +183,7 @@ void CheckXmlDoc(AstNode node)
183183
var m = member as IParameterizedMember;
184184
if (m != null && m.Parameters.Any(p => p.Name == name.Value))
185185
break;
186-
if (name.Value == "value" && (member.SymbolKind == SymbolKind.Property || member.SymbolKind == SymbolKind.Indexer || member.SymbolKind == SymbolKind.Event) && el.Name == "paramref")
186+
if (name.Value == "value" && member != null && (member.SymbolKind == SymbolKind.Property || member.SymbolKind == SymbolKind.Indexer || member.SymbolKind == SymbolKind.Event) && el.Name == "paramref")
187187
break;
188188
AddXmlIssue(name.ValueSegment.Offset - firstline.Length + 1, name.ValueSegment.Length - 2, string.Format(ctx.TranslateString("Parameter '{0}' not found"), name.Value));
189189
break;

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
148148
continue;
149149
if (fieldDeclaration.HasModifier(Modifiers.Public) || fieldDeclaration.HasModifier(Modifiers.Protected) || fieldDeclaration.HasModifier(Modifiers.Internal))
150150
continue;
151-
if (fieldDeclaration.Variables.Any (v => !(ctx.Resolve (v.Initializer) is ConstantResolveResult)))
151+
if (fieldDeclaration.Variables.Any (v => !ctx.Resolve (v.Initializer).IsCompileTimeConstant))
152152
continue;
153153
var rr = ctx.Resolve(fieldDeclaration.ReturnType);
154154
if (!IsValidConstType(rr.Type))
@@ -157,9 +157,9 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
157157
continue;
158158
var variable = fieldDeclaration.Variables.First();
159159
var mr = ctx.Resolve(variable) as MemberResolveResult;
160-
if (mr == null)
160+
if (mr == null || !(mr.Member is IVariable))
161161
continue;
162-
list.Add(Tuple.Create(variable, mr.Member as IVariable));
162+
list.Add(Tuple.Create(variable, (IVariable)mr.Member));
163163
}
164164
base.VisitTypeDeclaration(typeDeclaration);
165165
Collect();
@@ -173,7 +173,7 @@ public override void VisitVariableDeclarationStatement (VariableDeclarationState
173173
return;
174174
if (varDecl.Variables.Count () > 1)
175175
return;
176-
if (varDecl.Variables.Any (v => !(ctx.Resolve (v.Initializer) is ConstantResolveResult)))
176+
if (varDecl.Variables.Any (v => !ctx.Resolve (v.Initializer).IsCompileTimeConstant))
177177
return;
178178
var containingBlock = varDecl.GetParent<BlockStatement> ();
179179
if (containingBlock == null)

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,16 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
9696
if (def != null && def.KnownTypeCode == KnownTypeCode.None) {
9797
// user-defined value type -- might be mutable
9898
continue;
99-
} else if (ctx.Resolve (variable.Initializer) is ConstantResolveResult) {
99+
} else if (ctx.Resolve (variable.Initializer).IsCompileTimeConstant) {
100100
// handled by ConvertToConstantIssue
101101
continue;
102102
}
103103
}
104104

105105
var mr = ctx.Resolve(variable) as MemberResolveResult;
106-
if (mr == null)
106+
if (mr == null || !(mr.Member is IVariable))
107107
continue;
108-
list.Add(Tuple.Create(variable, mr.Member as IVariable, VariableState.None));
108+
list.Add(Tuple.Create(variable, (IVariable)mr.Member, VariableState.None));
109109
}
110110
base.VisitTypeDeclaration(typeDeclaration);
111111
Collect();

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ void AnalyzeThisReferenceExpression(BaseReferenceExpression baseReferenceExpress
107107
if (member == null)
108108
return;
109109

110-
if (declarationsSpaceVisitor.GetDeclarationSpace(baseReferenceExpression).IsNameUsed(member.Name))
110+
var localDeclarationSpace = declarationsSpaceVisitor.GetDeclarationSpace(baseReferenceExpression);
111+
if (localDeclarationSpace == null || localDeclarationSpace.IsNameUsed(member.Name))
111112
return;
112113

113114
var result = state.LookupSimpleNameOrTypeName(memberReference.MemberName, EmptyList<IType>.Instance, NameLookupMode.Expression);

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
6565
List<AstNode> redundantBase = new List<AstNode>();
6666
var type = ctx.Resolve(typeDeclaration).Type;
6767

68-
if (typeDeclaration.HasModifier(Modifiers.Partial)) {
68+
if (typeDeclaration.HasModifier(Modifiers.Partial) && type.GetDefinition() != null) {
6969
var parts = type.GetDefinition().Parts;
7070
foreach (var node in typeDeclaration.BaseTypes) {
7171
int count = 0;

src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ void AnalyzeThisReferenceExpression (ThisReferenceExpression thisReferenceExpres
172172
return;
173173
}
174174

175-
if (declarationsSpaceVisitor.GetDeclarationSpace(thisReferenceExpression).IsNameUsed(member.Name))
175+
var localDeclarationSpace = declarationsSpaceVisitor.GetDeclarationSpace(thisReferenceExpression);
176+
if (localDeclarationSpace == null || localDeclarationSpace.IsNameUsed(member.Name))
176177
return;
177178

178179
var result = state.LookupSimpleNameOrTypeName(memberReference.MemberName, EmptyList<IType>.Instance, NameLookupMode.Expression);

0 commit comments

Comments
 (0)