Browse Source

[Semantics] Added test case for nullable constant value / fixed last

fix.
newNRvisualizers
Mike Krüger 13 years ago
parent
commit
a1bcb54747
  1. 5
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs
  2. 8
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs
  3. 12
      ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs

5
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs

@ -327,4 +327,9 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase
get { return 0; } get { return 0; }
} }
} }
public class ClassWithMethodThatHasNullableDefaultParameter {
public void Foo (int? bar = 42) { }
}
} }

8
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

@ -1200,5 +1200,13 @@ namespace ICSharpCode.NRefactory.TypeSystem
var indexer = type.GetProperties(p => p.IsIndexer).Single(); var indexer = type.GetProperties(p => p.IsIndexer).Single();
Assert.AreEqual("Foo", indexer.Name); 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);
}
} }
} }

12
ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedParameter.cs

@ -235,17 +235,17 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
public object ConstantValue { public object ConstantValue {
get { get {
ResolveResult rr = LazyInit.VolatileRead(ref this.resolvedDefaultValue); ResolveResult rr = LazyInit.VolatileRead(ref this.resolvedDefaultValue);
if (rr == null) {
rr = defaultValue.Resolve(context);
LazyInit.GetOrSet(ref this.resolvedDefaultValue, rr);
}
if (rr is ConversionResolveResult) { if (rr is ConversionResolveResult) {
var crr = (ConversionResolveResult)rr; var crr = (ConversionResolveResult)rr;
if (crr.Conversion.IsNullableConversion) if (crr.Conversion.IsNullableConversion)
return crr.Input.ConstantValue; return crr.Input.ConstantValue;
} }
if (rr != null) { return rr.ConstantValue;
return rr.ConstantValue;
} else {
rr = defaultValue.Resolve(context);
return LazyInit.GetOrSet(ref this.resolvedDefaultValue, rr).ConstantValue;
}
} }
} }

Loading…
Cancel
Save