diff --git a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs index 6849a73c43..34cdac5d68 100644 --- a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs +++ b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs @@ -327,4 +327,9 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase get { return 0; } } } + + public class ClassWithMethodThatHasNullableDefaultParameter { + public void Foo (int? bar = 42) { } + } + } diff --git a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs index 90e4ce1cce..1a3538f9a9 100644 --- a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs +++ b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs @@ -1200,5 +1200,13 @@ namespace ICSharpCode.NRefactory.TypeSystem var indexer = type.GetProperties(p => p.IsIndexer).Single(); Assert.AreEqual("Foo", indexer.Name); } + + [Test] + public void TestNullableDefaultParameter() + { + ITypeDefinition type = GetTypeDefinition(typeof(ClassWithMethodThatHasNullableDefaultParameter)); + var method = type.GetMethods ().Single (m => m.Name == "Foo"); + Assert.AreEqual(42, method.Parameters.Single ().ConstantValue); + } } } diff --git a/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs b/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs index 4576b373fa..3a0a197de9 100644 --- a/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs +++ b/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs @@ -235,17 +235,17 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation public object ConstantValue { get { ResolveResult rr = LazyInit.VolatileRead(ref this.resolvedDefaultValue); + if (rr == null) { + rr = defaultValue.Resolve(context); + LazyInit.GetOrSet(ref this.resolvedDefaultValue, rr); + } if (rr is ConversionResolveResult) { var crr = (ConversionResolveResult)rr; if (crr.Conversion.IsNullableConversion) return crr.Input.ConstantValue; } - if (rr != null) { - return rr.ConstantValue; - } else { - rr = defaultValue.Resolve(context); - return LazyInit.GetOrSet(ref this.resolvedDefaultValue, rr).ConstantValue; - } + return rr.ConstantValue; + } }