Add support for public and internal ProxyClass (#58)

* x

* fx

* .
This commit is contained in:
Stef Heyenrath
2023-02-24 16:22:26 +01:00
committed by GitHub
parent 4c7f7cde4d
commit eadcf8585f
15 changed files with 296 additions and 36 deletions
@@ -31,19 +31,14 @@ internal class ProxySyntaxReceiver : ISyntaxReceiver
return false;
}
var attributeLists = interfaceDeclarationSyntax.AttributeLists.FirstOrDefault(x => x.Attributes.Any(a => GenerateProxyAttributes.Contains(a.Name.ToString())));
if (attributeLists is null)
var attributeList = interfaceDeclarationSyntax.AttributeLists.FirstOrDefault(x => x.Attributes.Any(a => GenerateProxyAttributes.Contains(a.Name.ToString())));
if (attributeList is null)
{
// InterfaceDeclarationSyntax should have the correct attribute
return false;
}
var argumentList = attributeLists.Attributes.FirstOrDefault()?.ArgumentList;
if (argumentList is null)
{
return false;
}
var usings = new List<string>();
string ns = interfaceDeclarationSyntax.GetNamespace();
@@ -60,29 +55,21 @@ internal class ProxySyntaxReceiver : ISyntaxReceiver
}
}
var typeSyntax = ((TypeOfExpressionSyntax)argumentList.Arguments[0].Expression).Type;
string rawTypeName = typeSyntax.ToString();
bool proxyBaseClasses;
try
{
proxyBaseClasses = bool.Parse(((LiteralExpressionSyntax)argumentList.Arguments[1].Expression).ToString());
}
catch
{
proxyBaseClasses = false;
}
var fluentBuilderAttributeArguments = AttributeArgumentListParser.ParseAttributeArguments(attributeList.Attributes.FirstOrDefault()?.ArgumentList);
var rawTypeNameAsString = fluentBuilderAttributeArguments.RawTypeName;
data = new ProxyData
{
Namespace = ns,
ShortInterfaceName = interfaceDeclarationSyntax.Identifier.ToString(),
FullInterfaceName = CreateFullInterfaceName(ns, interfaceDeclarationSyntax), // $"{ns}.{interfaceDeclarationSyntax.Identifier}",
FullRawTypeName = rawTypeName,
ShortTypeName = ConvertTypeName(rawTypeName).Split('.').Last(),
FullTypeName = ConvertTypeName(rawTypeName),
FullRawTypeName = rawTypeNameAsString,
ShortTypeName = ConvertTypeName(rawTypeNameAsString).Split('.').Last(),
FullTypeName = ConvertTypeName(rawTypeNameAsString),
Usings = usings,
ProxyBaseClasses = proxyBaseClasses
ProxyBaseClasses = fluentBuilderAttributeArguments.ProxyBaseClasses,
Accessibility = fluentBuilderAttributeArguments.Accessibility
};
return true;