Browse Source

Context actions - Fix: "Check for (not) null" is only offered for expressions where it makes sense (method call, property access, variable access, "as" typecast).

pull/15/head
mkonicek 15 years ago
parent
commit
2232a63936
  1. 23
      src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/CheckAssignmentCache.cs

23
src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/CheckAssignmentCache.cs

@ -72,8 +72,8 @@ namespace SharpRefactoring.ContextActions
var identifier = assignment.Left as IdentifierExpression; var identifier = assignment.Left as IdentifierExpression;
if (identifier == null) if (identifier == null)
return null; return null;
if (assignment.Right is ObjectCreateExpression) if (!ExpressionCanBeNull(assignment.Right))
// // don't offer action for "a = new Foo()" // don't offer action where it makes no sense
return null; return null;
return identifier.Identifier; return identifier.Identifier;
} }
@ -85,11 +85,22 @@ namespace SharpRefactoring.ContextActions
if (declaration.Variables.Count != 1) if (declaration.Variables.Count != 1)
return null; return null;
VariableDeclaration varDecl = declaration.Variables[0]; VariableDeclaration varDecl = declaration.Variables[0];
if (!varDecl.Initializer.IsNull && if (!ExpressionCanBeNull(varDecl.Initializer))
// don't offer action for "var a = new Foo()" // don't offer action where it makes no sense
!(varDecl.Initializer is ObjectCreateExpression))
return varDecl.Name;
return null; return null;
return varDecl.Name;
}
bool ExpressionCanBeNull(Expression expr)
{
if (expr == null) return false;
if (expr.IsNull) return false;
if (expr is PrimitiveExpression) return false;
if (expr is IdentifierExpression) return true;
if (expr is MemberReferenceExpression) return true;
if (expr is InvocationExpression) return true;
if (expr is CastExpression && ((CastExpression)expr).CastType == CastType.TryCast) return true;
return false;
} }
CodeGenerator GetCodeGenerator(EditorContext context) CodeGenerator GetCodeGenerator(EditorContext context)

Loading…
Cancel
Save