@ -1305,30 +1305,35 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
ResolveResult rr = ResolveInternal ( ( Expression ) expr . Parent , ExpressionContext . Default ) ;
ResolveResult rr = ResolveInternal ( ( Expression ) expr . Parent , ExpressionContext . Default ) ;
if ( rr ! = null )
if ( rr ! = null )
return rr . ResolvedType ;
return rr . ResolvedType ;
}
} else if ( expr . Parent is LambdaExpression ) {
if ( expr . Parent is LambdaExpression ) {
IReturnType delegateType = GetExpectedTypeFromContext ( expr . Parent as Expression ) ;
IReturnType delegateType = GetExpectedTypeFromContext ( expr . Parent as Expression ) ;
IMethod sig = CSharp . TypeInference . GetDelegateOrExpressionTreeSignature ( delegateType , true ) ;
IMethod sig = CSharp . TypeInference . GetDelegateOrExpressionTreeSignature ( delegateType , true ) ;
if ( sig ! = null )
if ( sig ! = null )
return sig . ReturnType ;
return sig . ReturnType ;
}
} else if ( expr . Parent is ReturnStatement ) {
if ( expr . Parent is ParenthesizedExpression ) {
Expression lambda = GetParentAnonymousMethodOrLambda ( expr . Parent ) ;
if ( lambda ! = null ) {
IReturnType delegateType = GetExpectedTypeFromContext ( lambda ) ;
IMethod sig = CSharp . TypeInference . GetDelegateOrExpressionTreeSignature ( delegateType , true ) ;
if ( sig ! = null )
return sig . ReturnType ;
} else {
if ( callingMember ! = null )
return callingMember . ReturnType ;
}
} else if ( expr . Parent is ParenthesizedExpression ) {
return GetExpectedTypeFromContext ( expr . Parent as Expression ) ;
return GetExpectedTypeFromContext ( expr . Parent as Expression ) ;
}
} else if ( expr . Parent is VariableDeclaration ) {
if ( expr . Parent is VariableDeclaration ) {
return GetTypeFromVariableDeclaration ( ( VariableDeclaration ) expr . Parent ) ;
return GetTypeFromVariableDeclaration ( ( VariableDeclaration ) expr . Parent ) ;
}
} else if ( expr . Parent is AssignmentExpression ) {
if ( expr . Parent is AssignmentExpression ) {
ResolveResult rr = ResolveInternal ( ( expr . Parent as AssignmentExpression ) . Left , ExpressionContext . Default ) ;
ResolveResult rr = ResolveInternal ( ( expr . Parent as AssignmentExpression ) . Left , ExpressionContext . Default ) ;
if ( rr ! = null )
if ( rr ! = null )
return rr . ResolvedType ;
return rr . ResolvedType ;
}
} else if ( expr . Parent is NamedArgumentExpression ) {
if ( expr . Parent is NamedArgumentExpression ) {
IMember m = ResolveNamedArgumentExpressionInObjectInitializer ( ( NamedArgumentExpression ) expr . Parent ) ;
IMember m = ResolveNamedArgumentExpressionInObjectInitializer ( ( NamedArgumentExpression ) expr . Parent ) ;
if ( m ! = null )
if ( m ! = null )
return m . ReturnType ;
return m . ReturnType ;
}
} else if ( expr . Parent is CollectionInitializerExpression ) {
if ( expr . Parent is CollectionInitializerExpression ) {
IReturnType collectionType ;
IReturnType collectionType ;
if ( expr . Parent . Parent is ObjectCreateExpression )
if ( expr . Parent . Parent is ObjectCreateExpression )
collectionType = TypeVisitor . CreateReturnType ( ( ( ObjectCreateExpression ) expr . Parent . Parent ) . CreateType , this ) ;
collectionType = TypeVisitor . CreateReturnType ( ( ( ObjectCreateExpression ) expr . Parent . Parent ) . CreateType , this ) ;
@ -1344,6 +1349,16 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null ;
return null ;
}
}
Expression GetParentAnonymousMethodOrLambda ( INode node )
{
while ( node ! = null ) {
if ( node is AnonymousMethodExpression | | node is LambdaExpression )
return ( Expression ) node ;
node = node . Parent ;
}
return null ;
}
IReturnType GetTypeFromVariableDeclaration ( VariableDeclaration varDecl )
IReturnType GetTypeFromVariableDeclaration ( VariableDeclaration varDecl )
{
{
TypeReference typeRef = varDecl . TypeReference ;
TypeReference typeRef = varDecl . TypeReference ;