Browse Source

fix NRE in TypeGuessing after `yield return new`

pull/517/head
Siegfried Pammer 11 years ago
parent
commit
b6f0a2b746
  1. 17
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs

17
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeGuessing.cs

@ -259,9 +259,20 @@ namespace ICSharpCode.NRefactory.CSharp @@ -259,9 +259,20 @@ namespace ICSharpCode.NRefactory.CSharp
}
if (expr.Parent is YieldReturnStatement) {
var state = resolver.GetResolverStateBefore(expr);
if (state != null && (state.CurrentMember.ReturnType is ParameterizedType)) {
var pt = (ParameterizedType)state.CurrentMember.ReturnType;
ParameterizedType pt = null;
var parent = expr.Ancestors.FirstOrDefault(n => n is EntityDeclaration || n is AnonymousMethodExpression|| n is LambdaExpression);
if (parent != null) {
var rr = resolver.Resolve(parent);
if (!rr.IsError)
pt = rr.Type as ParameterizedType;
}
var e = parent as EntityDeclaration;
if (e != null) {
var rt = resolver.Resolve(e.ReturnType);
if (!rt.IsError)
pt = rt.Type as ParameterizedType;
}
if (pt != null) {
if (pt.FullName == "System.Collections.Generic.IEnumerable") {
return new [] { pt.TypeArguments.First() };
}

Loading…
Cancel
Save