Skip to content

Commit e0d83af

Browse files
committed
fix formatting type name of Nullable<GenericValueType<...>>
1 parent 69192b1 commit e0d83af

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/Smdn.Reflection.ReverseGenerating/Smdn.Reflection.ReverseGenerating/CSharpTypeFormatter.FormatTypeNameWithNullabilityAnnotation.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ FormatTypeNameOptions options
8080
if (IsValueTupleType(nullableUnderlyingType))
8181
// special case for nullable value tuples (Nullable<ValueTuple<>>)
8282
return FormatValueTuple(target, builder, options).Append(nullabilityAnnotationForByRefParameter);
83+
else if (isGenericTypeClosedOrDefinition)
84+
// case for nullable generic value types (Nullable<GenericValueType<>>)
85+
// TODO: cannot get NullabilityInfo of generic type argument from Nullable<GenericValueType<>> (ex: KeyValuePair<int?, string?>?)
86+
return builder.Append(FormatTypeNameCore(targetType, options));
8387

8488
targetType = nullableUnderlyingType;
8589
}

tests/Smdn.Reflection.ReverseGenerating/Smdn.Reflection.ReverseGenerating/Generator.MemberDeclaration.Parameters.NullabilityAnnotations.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,22 @@ public void NullableNonLanguagePrimitiveRefType(Uri? p) { }
6363
[MemberDeclarationTestCase($"public void {nameof(NullableDictionaryOfRefTypeValue)}(Dictionary<string, string>? p) {{}}", ParameterWithNamespace = false)] public void NullableDictionaryOfRefTypeValue(Dictionary<string, string>? p) { }
6464
[MemberDeclarationTestCase($"public void {nameof(NullableDictionaryOfNullableRefTypeValue)}(Dictionary<string, string?>? p) {{}}", ParameterWithNamespace = false)] public void NullableDictionaryOfNullableRefTypeValue(Dictionary<string, string?>? p) { }
6565

66+
[MemberDeclarationTestCase($"public void {nameof(ListOfKeyValuePairOfValueTypeValue)}(List<KeyValuePair<string, int>> p) {{}}", ParameterWithNamespace = false)] public void ListOfKeyValuePairOfValueTypeValue(List<KeyValuePair<string, int>> p) { }
67+
[MemberDeclarationTestCase($"public void {nameof(ListOfKeyValuePairOfNullableValueTypeValue)}(List<KeyValuePair<string, int?>> p) {{}}", ParameterWithNamespace = false)] public void ListOfKeyValuePairOfNullableValueTypeValue(List<KeyValuePair<string, int?>> p) { }
68+
[MemberDeclarationTestCase($"public void {nameof(ListOfNullableKeyValuePairOfValueTypeValue)}(List<KeyValuePair<string, int>?> p) {{}}", ParameterWithNamespace = false)] public void ListOfNullableKeyValuePairOfValueTypeValue(List<KeyValuePair<string, int>?> p) { }
69+
[MemberDeclarationTestCase($"public void {nameof(ListOfNullableKeyValuePairOfNullableValueTypeValue)}(List<KeyValuePair<string, int?>?> p) {{}}", ParameterWithNamespace = false)] public void ListOfNullableKeyValuePairOfNullableValueTypeValue(List<KeyValuePair<string, int?>?> p) { }
70+
[MemberDeclarationTestCase($"public void {nameof(NullableListOfKeyValuePairOfValueTypeValue)}(List<KeyValuePair<string, int>>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfKeyValuePairOfValueTypeValue(List<KeyValuePair<string, int>>? p) { }
71+
[MemberDeclarationTestCase($"public void {nameof(NullableListOfKeyValuePairOfNullableValueTypeValue)}(List<KeyValuePair<string, int?>>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfKeyValuePairOfNullableValueTypeValue(List<KeyValuePair<string, int?>>? p) { }
72+
[MemberDeclarationTestCase($"public void {nameof(NullableListOfNullableKeyValuePairOfNullableValueTypeValue)}(List<KeyValuePair<string, int?>?>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfNullableKeyValuePairOfNullableValueTypeValue(List<KeyValuePair<string, int?>?>? p) { }
73+
74+
[MemberDeclarationTestCase($"public void {nameof(ListOfKeyValuePairOfRefTypeValue)}(List<KeyValuePair<string, string>> p) {{}}", ParameterWithNamespace = false)] public void ListOfKeyValuePairOfRefTypeValue(List<KeyValuePair<string, string>> p) { }
75+
[MemberDeclarationTestCase($"public void {nameof(ListOfKeyValuePairOfNullableRefTypeValue)}(List<KeyValuePair<string, string?>> p) {{}}", ParameterWithNamespace = false)] public void ListOfKeyValuePairOfNullableRefTypeValue(List<KeyValuePair<string, string?>> p) { }
76+
[MemberDeclarationTestCase($"public void {nameof(ListOfNullableKeyValuePairOfRefTypeValue)}(List<KeyValuePair<string, string>?> p) {{}}", ParameterWithNamespace = false)] public void ListOfNullableKeyValuePairOfRefTypeValue(List<KeyValuePair<string, string>?> p) { }
77+
[SkipTestCase("cannot get NullabilityInfo of generic type argument from Nullable<GenericValueType<>>")] [MemberDeclarationTestCase($"public void {nameof(ListOfNullableKeyValuePairOfNullableRefTypeValue)}(List<KeyValuePair<string, string?>?> p) {{}}", ParameterWithNamespace = false)] public void ListOfNullableKeyValuePairOfNullableRefTypeValue(List<KeyValuePair<string, string?>?> p) { }
78+
[MemberDeclarationTestCase($"public void {nameof(NullableListOfKeyValuePairOfRefTypeValue)}(List<KeyValuePair<string, string>>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfKeyValuePairOfRefTypeValue(List<KeyValuePair<string, string>>? p) { }
79+
[MemberDeclarationTestCase($"public void {nameof(NullableListOfKeyValuePairOfNullableRefTypeValue)}(List<KeyValuePair<string, string?>>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfKeyValuePairOfNullableRefTypeValue(List<KeyValuePair<string, string?>>? p) { }
80+
[SkipTestCase("cannot get NullabilityInfo of generic type argument from Nullable<GenericValueType<>>")] [MemberDeclarationTestCase($"public void {nameof(NullableListOfNullableKeyValuePairOfNullableRefTypeValue)}(List<KeyValuePair<string, string?>?>? p) {{}}", ParameterWithNamespace = false)] public void NullableListOfNullableKeyValuePairOfNullableRefTypeValue(List<KeyValuePair<string, string?>?>? p) { }
81+
6682
class Params {
6783
[MemberDeclarationTestCase($"public void {nameof(ArrayOfValueType)}(params int[] p) {{}}")] public void ArrayOfValueType(params int[] p) { }
6884
[MemberDeclarationTestCase($"public void {nameof(ArrayOfNullableValueType)}(params int?[] p) {{}}")] public void ArrayOfNullableValueType(params int?[] p) { }

tests/Smdn.Reflection.ReverseGenerating/Smdn.Reflection.ReverseGenerating/Generator.MemberDeclaration.ReturnParameters.NullabilityAnnotations.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,22 @@ public class NullabilityAnnotations {
4848
[MemberDeclarationTestCase($"public List<string>? {nameof(NullableListOfRefType)}() {{}}", MemberWithNamespace = false)] public List<string>? NullableListOfRefType() => throw null;
4949
[MemberDeclarationTestCase($"public List<string?>? {nameof(NullableListOfNullableRefType)}() {{}}", MemberWithNamespace = false)] public List<string?>? NullableListOfNullableRefType() => throw null;
5050

51+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int>> {nameof(ListOfKeyValuePairOfValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int>> ListOfKeyValuePairOfValueTypeValue() => throw null;
52+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int?>> {nameof(ListOfKeyValuePairOfNullableValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int?>> ListOfKeyValuePairOfNullableValueTypeValue() => throw null;
53+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int>?> {nameof(ListOfNullableKeyValuePairOfValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int>?> ListOfNullableKeyValuePairOfValueTypeValue() => throw null;
54+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int?>?> {nameof(ListOfNullableKeyValuePairOfNullableValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int?>?> ListOfNullableKeyValuePairOfNullableValueTypeValue() => throw null;
55+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int>>? {nameof(NullableListOfKeyValuePairOfValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int>>? NullableListOfKeyValuePairOfValueTypeValue() => throw null;
56+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int?>>? {nameof(NullableListOfKeyValuePairOfNullableValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int?>>? NullableListOfKeyValuePairOfNullableValueTypeValue() => throw null;
57+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, int?>?>? {nameof(NullableListOfNullableKeyValuePairOfNullableValueTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, int?>?>? NullableListOfNullableKeyValuePairOfNullableValueTypeValue() => throw null;
58+
59+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, string>> {nameof(ListOfKeyValuePairOfRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string>> ListOfKeyValuePairOfRefTypeValue() => throw null;
60+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, string?>> {nameof(ListOfKeyValuePairOfNullableRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string?>> ListOfKeyValuePairOfNullableRefTypeValue() => throw null;
61+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, string>?> {nameof(ListOfNullableKeyValuePairOfRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string>?> ListOfNullableKeyValuePairOfRefTypeValue() => throw null;
62+
[SkipTestCase("cannot get NullabilityInfo of generic type argument from Nullable<GenericValueType<>>")] [MemberDeclarationTestCase($"public List<KeyValuePair<string, string?>?> {nameof(ListOfNullableKeyValuePairOfNullableRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string?>?> ListOfNullableKeyValuePairOfNullableRefTypeValue() => throw null;
63+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, string>>? {nameof(NullableListOfKeyValuePairOfRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string>>? NullableListOfKeyValuePairOfRefTypeValue() => throw null;
64+
[MemberDeclarationTestCase($"public List<KeyValuePair<string, string?>>? {nameof(NullableListOfKeyValuePairOfNullableRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string?>>? NullableListOfKeyValuePairOfNullableRefTypeValue() => throw null;
65+
[SkipTestCase("cannot get NullabilityInfo of generic type argument from Nullable<GenericValueType<>>")] [MemberDeclarationTestCase($"public List<KeyValuePair<string, string?>?>? {nameof(NullableListOfNullableKeyValuePairOfNullableRefTypeValue)}() {{}}", MemberWithNamespace = false)] public List<KeyValuePair<string, string?>?>? NullableListOfNullableKeyValuePairOfNullableRefTypeValue() => throw null;
66+
5167
class Modifiers {
5268
class Ref {
5369
[MemberDeclarationTestCase($"public ref int {nameof(ValueType)}() {{}}")] public ref int ValueType() => throw null;

0 commit comments

Comments
 (0)