Browse Source

Context actions - Fix: "Add check for null" is offered only for parameter definitions of non-abstract methods.

pull/15/head
mkonicek 15 years ago
parent
commit
1e8e0353c0
  1. 28
      src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/ParamCheck.cs
  2. 3
      src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/ParamCheckForNull.cs
  3. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IEntity.cs

28
src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/ParamCheck.cs

@ -14,31 +14,41 @@ namespace SharpRefactoring.ContextActions @@ -14,31 +14,41 @@ namespace SharpRefactoring.ContextActions
{
public override bool IsAvailable(EditorContext context)
{
var paramAtCaret = GetParameterAtCaret(context.CurrentSymbol);
var paramAtCaret = GetParameterAtCaret(context);
if (paramAtCaret == null)
return false;
return IsAvailable(paramAtCaret.ResolvedType);
}
public LocalResolveResult GetParameterAtCaret(ResolveResult symbol)
public LocalResolveResult GetParameterAtCaret(EditorContext context)
{
LocalResolveResult param = symbol as LocalResolveResult;
if (param == null || param.CallingClass == null || param.ResolvedType == null)
LocalResolveResult paramAtCaret = context.CurrentSymbol as LocalResolveResult;
if (paramAtCaret == null || paramAtCaret.CallingClass == null || paramAtCaret.ResolvedType == null)
return null;
if (param.CallingClass.ProjectContent.Language != LanguageProperties.CSharp)
// only for C#
if (paramAtCaret.CallingClass.ProjectContent.Language != LanguageProperties.CSharp)
return null;
if (!param.IsParameter)
if (!paramAtCaret.IsParameter)
return null;
// FIXME must be parameter definition, and method with body (not interface or abstract)
return param;
// must be definition
if (!paramAtCaret.VariableDefinitionRegion.IsInside(context.CurrentExpression.Region.BeginLine, context.CurrentExpression.Region.BeginColumn))
return null;
// must be not abstract/interface method
if (paramAtCaret.CallingMember == null || paramAtCaret.CallingMember.IsAbstract ||
paramAtCaret.CallingMember.DeclaringType.ClassType == ClassType.Interface)
return null;
return paramAtCaret;
}
public override void Execute(EditorContext context)
{
var paramAtCaret = GetParameterAtCaret(context.CurrentSymbol);
var paramAtCaret = GetParameterAtCaret(context);
if (paramAtCaret != null)
{
Extensions.AddCodeToMethodStart(paramAtCaret.CallingMember, context.Editor, GetCodeToInsert(paramAtCaret.VariableName));
}
}
public abstract bool IsAvailable(IReturnType parameterType);

3
src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/ParamCheckForNull.cs

@ -19,7 +19,8 @@ namespace SharpRefactoring.ContextActions @@ -19,7 +19,8 @@ namespace SharpRefactoring.ContextActions
public override bool IsAvailable(IReturnType parameterType)
{
var parameterTypeClass = parameterType.GetUnderlyingClass();
return (parameterTypeClass == null || parameterTypeClass.ClassType != ClassType.Enum && parameterTypeClass.ClassType != ClassType.Struct);
return (parameterTypeClass == null ||
(parameterTypeClass.ClassType != ClassType.Enum && parameterTypeClass.ClassType != ClassType.Struct));
}
public override string GetCodeToInsert(string parameterName)

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/IEntity.cs

@ -49,6 +49,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -49,6 +49,10 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
/// <summary>
/// Returns true if this entity has the 'abstract' modifier set.
/// (Returns false for interface members).
/// </summary>
bool IsAbstract {
get;
}

Loading…
Cancel
Save