From 428f9a5f21be253341bdc297b0892dd4d9c3f42a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 10 Sep 2010 10:23:50 +0200 Subject: [PATCH] simplified check for reference types based on Daniel's advice --- .../Project/Src/Gui/InsertCtorDialog.xaml.cs | 3 ++- .../Project/Src/Gui/PropertyOrFieldWrapper.cs | 23 ++++++------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs b/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs index fd6442122a..37bb94f5ea 100644 --- a/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs +++ b/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs @@ -53,7 +53,8 @@ namespace SharpRefactoring.Gui foreach (PropertyOrFieldWrapper w in filtered) { if (w.AddCheckForNull) { - if (w.Type.IsReferenceType == true || PropertyOrFieldWrapper.IsGenericReferenceType(w.Type)) + // true = reference, null = generic or unknown + if (w.Type.IsReferenceType != false) block.AddChild( new IfElseStatement( new BinaryOperatorExpression(new IdentifierExpression(w.ParameterName), BinaryOperatorType.Equality, new PrimitiveExpression(null)), diff --git a/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/PropertyOrFieldWrapper.cs b/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/PropertyOrFieldWrapper.cs index a9d0f23b05..d32323d079 100644 --- a/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/PropertyOrFieldWrapper.cs +++ b/src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/PropertyOrFieldWrapper.cs @@ -26,7 +26,7 @@ namespace SharpRefactoring.Gui public PropertyOrFieldWrapper(IMember member) { if (member == null || member.ReturnType == null) - throw new ArgumentNullException("field"); + throw new ArgumentNullException("member"); if (!(member is IField || member is IProperty)) throw new ArgumentException("member must be IField or IProperty"); @@ -39,7 +39,7 @@ namespace SharpRefactoring.Gui string parameterName; public string ParameterName { - get { + get { if (parameterName == null) parameterName = ToParameterName(this.MemberName); return parameterName; @@ -58,27 +58,18 @@ namespace SharpRefactoring.Gui public bool IsNullable { get { - return member.ReturnType.IsReferenceType == true - || member.ReturnType.IsConstructedReturnType && member.ReturnType.Name == "Nullable" - || IsGenericReferenceType(member.ReturnType); + // true = reference, null = generic or unknown + return member.ReturnType.IsReferenceType != false + || (member.ReturnType.IsConstructedReturnType && member.ReturnType.Name == "Nullable"); } } - public static bool IsGenericReferenceType(IReturnType type) - { - if (type == null || !type.IsGenericReturnType) - return false; - ITypeParameter param = type.CastToGenericReturnType().TypeParameter; - return param.HasReferenceTypeConstraint - || param.Constraints.Any(constr => constr.IsReferenceType == true); - } - public bool HasRange { get { return IsTypeWithRange(member.ReturnType) || // IsConstructedReturnType handles Nullable types - (member.ReturnType.IsConstructedReturnType && - IsTypeWithRange(member.ReturnType.CastToConstructedReturnType().TypeArguments.First())); + (member.ReturnType.IsConstructedReturnType && member.ReturnType.Name == "Nullable" + && IsTypeWithRange(member.ReturnType.CastToConstructedReturnType().TypeArguments.First())); } }