mirror of https://github.com/Xpl0itR/protodec.git
search loaded types for the IMessage interface before loading the Google.Protobuf DLL
also make lambdas static where possible
This commit is contained in:
parent
c61334d291
commit
68ee943b9d
|
@ -35,7 +35,8 @@ public sealed class AssemblyInspector : IDisposable
|
||||||
|
|
||||||
public IEnumerable<Type> GetProtobufMessageTypes()
|
public IEnumerable<Type> GetProtobufMessageTypes()
|
||||||
{
|
{
|
||||||
Type? googleProtobufIMessage = AssemblyContext.LoadFromAssemblyName("Google.Protobuf")
|
Type? googleProtobufIMessage = LoadedTypes.SingleOrDefault(static type => type?.FullName == "Google.Protobuf.IMessage", null)
|
||||||
|
?? AssemblyContext.LoadFromAssemblyName("Google.Protobuf")
|
||||||
.GetType("Google.Protobuf.IMessage");
|
.GetType("Google.Protobuf.IMessage");
|
||||||
return from type
|
return from type
|
||||||
in LoadedTypes
|
in LoadedTypes
|
||||||
|
@ -58,7 +59,7 @@ public sealed class AssemblyInspector : IDisposable
|
||||||
{
|
{
|
||||||
public readonly IReadOnlyDictionary<string, string> AssemblyPathLookup =
|
public readonly IReadOnlyDictionary<string, string> AssemblyPathLookup =
|
||||||
assemblyPaths.ToDictionary(
|
assemblyPaths.ToDictionary(
|
||||||
path => Path.GetFileNameWithoutExtension(path),
|
static path => Path.GetFileNameWithoutExtension(path),
|
||||||
StringComparer.OrdinalIgnoreCase);
|
StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
|
@ -44,7 +44,7 @@ public sealed class Message : Protobuf
|
||||||
writer.WriteLine(" {");
|
writer.WriteLine(" {");
|
||||||
writer.Indent++;
|
writer.Indent++;
|
||||||
|
|
||||||
int[] oneOfs = OneOfs.SelectMany(oneOf => oneOf.Value).ToArray();
|
int[] oneOfs = OneOfs.SelectMany(static oneOf => oneOf.Value).ToArray();
|
||||||
|
|
||||||
foreach ((int fieldId, (bool, string, string) field) in Fields)
|
foreach ((int fieldId, (bool, string, string) field) in Fields)
|
||||||
{
|
{
|
||||||
|
|
|
@ -104,8 +104,8 @@ public sealed class ProtodecContext
|
||||||
{
|
{
|
||||||
string oneOfName = TranslateOneOfName(property.Name);
|
string oneOfName = TranslateOneOfName(property.Name);
|
||||||
int[] oneOfProtoFieldIds = propertyType.GetFields(BindingFlags.Public | BindingFlags.Static)
|
int[] oneOfProtoFieldIds = propertyType.GetFields(BindingFlags.Public | BindingFlags.Static)
|
||||||
.Select(field => (int)field.GetRawConstantValue()!)
|
.Select(static field => (int)field.GetRawConstantValue()!)
|
||||||
.Where(id => id > 0)
|
.Where(static id => id > 0)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
message.OneOfs.Add(oneOfName, oneOfProtoFieldIds);
|
message.OneOfs.Add(oneOfName, oneOfProtoFieldIds);
|
||||||
|
@ -242,7 +242,7 @@ public sealed class ProtodecContext
|
||||||
private string TranslateEnumFieldName(FieldInfo field, string enumName)
|
private string TranslateEnumFieldName(FieldInfo field, string enumName)
|
||||||
{
|
{
|
||||||
if (field.GetCustomAttributesData()
|
if (field.GetCustomAttributesData()
|
||||||
.SingleOrDefault(attr => attr.AttributeType.Name == "OriginalNameAttribute")
|
.SingleOrDefault(static attr => attr.AttributeType.Name == "OriginalNameAttribute")
|
||||||
?.ConstructorArguments[0]
|
?.ConstructorArguments[0]
|
||||||
.Value
|
.Value
|
||||||
is string originalName)
|
is string originalName)
|
||||||
|
@ -280,6 +280,6 @@ public sealed class ProtodecContext
|
||||||
|
|
||||||
private static bool HasProtocAttribute(MemberInfo member) =>
|
private static bool HasProtocAttribute(MemberInfo member) =>
|
||||||
member.GetCustomAttributesData()
|
member.GetCustomAttributesData()
|
||||||
.Any(attr => attr.AttributeType.Name == nameof(GeneratedCodeAttribute)
|
.Any(static attr => attr.AttributeType.Name == nameof(GeneratedCodeAttribute)
|
||||||
&& attr.ConstructorArguments[0].Value as string == "protoc");
|
&& attr.ConstructorArguments[0].Value as string == "protoc");
|
||||||
}
|
}
|
Loading…
Reference in New Issue