FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Report missing `[MessagePackObject]` attribute for generic types by AArnott · Pull Request #1859 · MessagePack-CSharp/MessagePack-CSharp · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .cs  (3) All 1 file type selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
private const string InvalidMessagePackObjectTitle = "MessagePackObject validation";
private const DiagnosticSeverity InvalidMessagePackObjectSeverity = DiagnosticSeverity.Error;

internal static readonly DiagnosticDescriptor TypeMustBeMessagePackObject = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor TypeMustBeMessagePackObject = new DiagnosticDescriptor(
id: UseMessagePackObjectAttributeId,
title: "Use MessagePackObjectAttribute",
category: Category,
Expand All @@ -42,7 +42,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(UseMessagePackObjectAttributeId));

internal static readonly DiagnosticDescriptor MessageFormatterMustBeMessagePackFormatter = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor MessageFormatterMustBeMessagePackFormatter = new DiagnosticDescriptor(
id: MessagePackFormatterMustBeMessagePackFormatterId,
title: "Must be IMessageFormatter",
category: Category,
Expand All @@ -52,7 +52,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(MessagePackFormatterMustBeMessagePackFormatterId));

internal static readonly DiagnosticDescriptor PublicMemberNeedsKey = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor PublicMemberNeedsKey = new DiagnosticDescriptor(
id: AttributeMessagePackObjectMembersId,
title: "Attribute properties and fields of MessagePack objects",
category: Category,
Expand All @@ -62,7 +62,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(AttributeMessagePackObjectMembersId));

internal static readonly DiagnosticDescriptor BaseTypeContainsUnattributedPublicMembers = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor BaseTypeContainsUnattributedPublicMembers = new DiagnosticDescriptor(
id: AttributeMessagePackObjectMembersId,
title: "Attribute properties and fields of MessagePack objects",
category: Category,
Expand All @@ -72,7 +72,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(AttributeMessagePackObjectMembersId));

internal static readonly DiagnosticDescriptor InvalidMessagePackObject = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor InvalidMessagePackObject = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -82,7 +82,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InvalidMessagePackObjectId));

internal static readonly DiagnosticDescriptor BothStringAndIntKeyAreNull = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor BothStringAndIntKeyAreNull = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -92,7 +92,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InvalidMessagePackObjectId));

internal static readonly DiagnosticDescriptor DoNotMixStringAndIntKeys = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor DoNotMixStringAndIntKeys = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -102,7 +102,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InvalidMessagePackObjectId));

internal static readonly DiagnosticDescriptor KeysMustBeUnique = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor KeysMustBeUnique = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -112,7 +112,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InvalidMessagePackObjectId));

internal static readonly DiagnosticDescriptor UnionAttributeRequired = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor UnionAttributeRequired = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -124,7 +124,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer

// This is important because [Key] on a private member still will not be serialized, which is very confusing until
// one realizes the type is serializing in map mode.
internal static readonly DiagnosticDescriptor KeyAnnotatedMemberInMapMode = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor KeyAnnotatedMemberInMapMode = new DiagnosticDescriptor(
id: InvalidMessagePackObjectId,
title: InvalidMessagePackObjectTitle,
category: Category,
Expand All @@ -134,7 +134,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InvalidMessagePackObjectId));

internal static readonly DiagnosticDescriptor NoDeserializingConstructor = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor NoDeserializingConstructor = new DiagnosticDescriptor(
id: DeserializingConstructorId,
title: "Deserializing constructors",
category: Category,
Expand All @@ -144,7 +144,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(DeserializingConstructorId));

internal static readonly DiagnosticDescriptor DeserializingConstructorParameterTypeMismatch = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor DeserializingConstructorParameterTypeMismatch = new DiagnosticDescriptor(
id: DeserializingConstructorId,
title: "Deserializing constructors",
category: Category,
Expand All @@ -154,7 +154,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(DeserializingConstructorId));

internal static readonly DiagnosticDescriptor DeserializingConstructorParameterIndexMissing = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor DeserializingConstructorParameterIndexMissing = new DiagnosticDescriptor(
id: DeserializingConstructorId,
title: "Deserializing constructors",
category: Category,
Expand All @@ -164,7 +164,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(DeserializingConstructorId));

internal static readonly DiagnosticDescriptor DeserializingConstructorParameterNameMissing = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor DeserializingConstructorParameterNameMissing = new DiagnosticDescriptor(
id: DeserializingConstructorId,
title: "Deserializing constructors",
category: Category,
Expand All @@ -174,7 +174,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(DeserializingConstructorId));

internal static readonly DiagnosticDescriptor DeserializingConstructorParameterNameDuplicate = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor DeserializingConstructorParameterNameDuplicate = new DiagnosticDescriptor(
id: DeserializingConstructorId,
title: "Deserializing constructors",
category: Category,
Expand All @@ -184,7 +184,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(DeserializingConstructorId));

internal static readonly DiagnosticDescriptor AotUnionAttributeRequiresTypeArg = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor AotUnionAttributeRequiresTypeArg = new DiagnosticDescriptor(
id: AOTLimitationsId,
title: "AOT limitations",
category: Category,
Expand All @@ -194,7 +194,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(AOTLimitationsId));

internal static readonly DiagnosticDescriptor AotArrayRankTooHigh = new DiagnosticDescriptor(
public static readonly DiagnosticDescriptor AotArrayRankTooHigh = new DiagnosticDescriptor(
id: AOTLimitationsId,
title: "AOT limitations",
category: Category,
Expand All @@ -204,7 +204,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(AOTLimitationsId));

internal static readonly DiagnosticDescriptor CollidingFormatters = new(
public static readonly DiagnosticDescriptor CollidingFormatters = new(
id: CollidingFormattersId,
title: "Colliding formatters",
category: Category,
Expand Down Expand Up @@ -234,7 +234,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(InaccessibleFormatterId));

internal static readonly DiagnosticDescriptor PartialTypeRequired = new(
public static readonly DiagnosticDescriptor PartialTypeRequired = new(
id: PartialTypeRequiredId,
title: "Partial type required",
category: Category,
Expand All @@ -244,7 +244,7 @@ public class MsgPack00xMessagePackAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true,
helpLinkUri: AnalyzerUtilities.GetHelpLink(PartialTypeRequiredId));

internal static readonly DiagnosticDescriptor InaccessibleDataType = new(
public static readonly DiagnosticDescriptor InaccessibleDataType = new(
id: InaccessibleDataTypeId,
title: "Internally accessible data type required",
category: Category,
Expand Down
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -574,8 +574,7 @@ private bool CollectGeneric(INamedTypeSymbol type)
if (type.IsDefinition)
{
this.CollectGenericUnion(type);
this.CollectObject(type);
return true;
return this.CollectObject(type);
}
else
{
Expand All @@ -585,7 +584,10 @@ private bool CollectGeneric(INamedTypeSymbol type)
this.GetObjectInfo(type);

// Collect generic type definition, that is not collected when it is defined outside target project.
this.CollectCore(type.OriginalDefinition);
if (!this.CollectCore(type.OriginalDefinition))
{
return false;
}
}

// Collect substituted types for the type parameters (e.g. Bar in Foo<Bar>)
Expand Down
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) All contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using MessagePack.SourceGenerator.Analyzers;
using Microsoft.CodeAnalysis.Testing;
using VerifyCS = CSharpCodeFixVerifier<MessagePack.SourceGenerator.Analyzers.MsgPack00xMessagePackAnalyzer, MessagePack.Analyzers.CodeFixes.MessagePackCodeFixProvider>;

Expand Down Expand Up @@ -354,4 +355,47 @@ public class Bar : Foo
MarkupOptions = MarkupOptions.UseFirstDescriptor,
}.RunAsync();
}

[Fact]
public async Task AddAttributeToGenericType()
{
string input = Preamble + """
public class Foo<T>
{
public T Member { get; set; }
}

[MessagePackObject]
public class Bar
{
[Key(0)]
public {|MsgPack003:Foo<int>|} MemberUserGeneric { get; set; }

[Key(1)]
public System.Collections.Generic.List<int> MemberKnownGeneric { get; set; }
}
""";

string output = Preamble + """

[MessagePackObject]
public class Foo<T>
{
[Key(0)]
public T Member { get; set; }
}

[MessagePackObject]
public class Bar
{
[Key(0)]
public Foo<int> MemberUserGeneric { get; set; }

[Key(1)]
public System.Collections.Generic.List<int> MemberKnownGeneric { get; set; }
}
""";

await VerifyCS.VerifyCodeFixAsync(input, output);
}
}

Back | FazBrowse Home | New Git URL