diff --git a/src-examples/ProxyInterfaceConsumer/IGeneratorExecutionContext.cs b/src-examples/ProxyInterfaceConsumer/IGeneratorExecutionContext.cs
new file mode 100644
index 0000000..3346a24
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumer/IGeneratorExecutionContext.cs
@@ -0,0 +1,7 @@
+namespace ProxyInterfaceConsumer
+{
+ [ProxyInterfaceGenerator.Proxy(typeof(Microsoft.CodeAnalysis.GeneratorExecutionContext))]
+ public partial interface IGeneratorExecutionContext
+ {
+ }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumer/Person.cs b/src-examples/ProxyInterfaceConsumer/Person.cs
index fba8ddf..9f50110 100644
--- a/src-examples/ProxyInterfaceConsumer/Person.cs
+++ b/src-examples/ProxyInterfaceConsumer/Person.cs
@@ -16,6 +16,7 @@ namespace ProxyInterfaceConsumer
public List
AddressesLIst { get; set; }
public Dictionary AddressesDict { get; set; } = new Dictionary();
+ public Dictionary AddressesDict2 { get; set; } = new Dictionary();
public E E { get; set; }
@@ -26,9 +27,11 @@ namespace ProxyInterfaceConsumer
return 600;
}
- public void AddAddress(Address a)
+ public Address AddAddress(Address a)
{
AddressesDict.Add($"{AddressesDict.Count}", a);
+
+ return a;
}
public void Void()
diff --git a/src-examples/ProxyInterfaceConsumer/Program.cs b/src-examples/ProxyInterfaceConsumer/Program.cs
index 7d5ec4e..d78ea89 100644
--- a/src-examples/ProxyInterfaceConsumer/Program.cs
+++ b/src-examples/ProxyInterfaceConsumer/Program.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text.Json;
using AutoMapper;
+using Microsoft.CodeAnalysis;
namespace ProxyInterfaceConsumer
{
@@ -34,7 +35,8 @@ namespace ProxyInterfaceConsumer
p.Name = "test";
var ap = new AddressProxy(new Address { HouseNumber = 42 });
p.Address = ap;
- p.AddAddress(ap);
+ var add = p.AddAddress(ap);
+ Console.WriteLine("add = " + JsonSerializer.Serialize(add, JsonSerializerOptions));
p.AddAddress(new AddressProxy(new Address { HouseNumber = 1000 }));
//p.MyNamedTypeSymbol = null;
@@ -42,6 +44,10 @@ namespace ProxyInterfaceConsumer
//p.Add("x");
//p.Void();
Console.WriteLine(JsonSerializer.Serialize(p, JsonSerializerOptions));
+
+ GeneratorExecutionContext g = new GeneratorExecutionContext();
+ IGeneratorExecutionContext gc = new GeneratorExecutionContextProxy(g);
+ int y = 9;
}
}
diff --git a/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj b/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
index 5bb31b9..e5cab6a 100644
--- a/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
+++ b/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
@@ -7,12 +7,12 @@
-
+
diff --git a/src-examples/ProxyInterfaceConsumerViaNuGet/Person.cs b/src-examples/ProxyInterfaceConsumerViaNuGet/Person.cs
index fba8ddf..bdecbe2 100644
--- a/src-examples/ProxyInterfaceConsumerViaNuGet/Person.cs
+++ b/src-examples/ProxyInterfaceConsumerViaNuGet/Person.cs
@@ -26,9 +26,11 @@ namespace ProxyInterfaceConsumer
return 600;
}
- public void AddAddress(Address a)
+ public Address AddAddress(Address a)
{
AddressesDict.Add($"{AddressesDict.Count}", a);
+
+ return a;
}
public void Void()
diff --git a/src-examples/ProxyInterfaceConsumerViaNuGet/Program.cs b/src-examples/ProxyInterfaceConsumerViaNuGet/Program.cs
index 0a57c69..798085d 100644
--- a/src-examples/ProxyInterfaceConsumerViaNuGet/Program.cs
+++ b/src-examples/ProxyInterfaceConsumerViaNuGet/Program.cs
@@ -16,7 +16,9 @@ namespace ProxyInterfaceConsumer
p.Name = "test";
var ap = new AddressProxy(new Address { HouseNumber = 42 });
p.Address = ap;
- p.AddAddress(ap);
+ var add = p.AddAddress(ap);
+ Console.WriteLine("add = " + JsonSerializer.Serialize(add, JsonSerializerOptions));
+
p.AddAddress(new AddressProxy(new Address { HouseNumber = 1000 }));
Console.WriteLine(JsonSerializer.Serialize(p, JsonSerializerOptions));
diff --git a/src/ProxyInterfaceSourceGenerator/Extensions/SymbolExtensions.cs b/src/ProxyInterfaceSourceGenerator/Extensions/SymbolExtensions.cs
index 442bbc2..2f522d2 100644
--- a/src/ProxyInterfaceSourceGenerator/Extensions/SymbolExtensions.cs
+++ b/src/ProxyInterfaceSourceGenerator/Extensions/SymbolExtensions.cs
@@ -22,12 +22,17 @@ namespace ProxyInterfaceSourceGenerator.Extensions
public static TypeEnum GetTypeEnum(this IParameterSymbol p)
{
- if (p.Type.IsValueType || p.Type.ToString() == "string")
+ return GetTypeEnum(p.Type);
+ }
+
+ public static TypeEnum GetTypeEnum(this ITypeSymbol ts)
+ {
+ if (ts.IsValueType || ts.ToString() == "string")
{
return TypeEnum.ValueTypeOrString;
}
- if (p.Type.TypeKind == TypeKind.Interface)
+ if (ts.TypeKind == TypeKind.Interface)
{
return TypeEnum.Interface;
}
diff --git a/src/ProxyInterfaceSourceGenerator/Extensions/SyntaxNodeUtils.cs b/src/ProxyInterfaceSourceGenerator/Extensions/SyntaxNodeUtils.cs
new file mode 100644
index 0000000..4aadfca
--- /dev/null
+++ b/src/ProxyInterfaceSourceGenerator/Extensions/SyntaxNodeUtils.cs
@@ -0,0 +1,40 @@
+using Microsoft.CodeAnalysis;
+
+namespace ProxyInterfaceSourceGenerator.Extensions
+{
+ internal static class SyntaxNodeUtils
+ {
+ // https://stackoverflow.com/questions/20458457/getting-class-fullname-including-namespace-from-roslyn-classdeclarationsyntax
+ public static bool TryGetParentSyntax(this SyntaxNode syntaxNode, out T result) where T : SyntaxNode
+ {
+ result = null;
+
+ if (syntaxNode is null)
+ {
+ return false;
+ }
+
+ try
+ {
+ syntaxNode = syntaxNode.Parent;
+
+ if (syntaxNode is null)
+ {
+ return false;
+ }
+
+ if (syntaxNode.GetType() == typeof(T))
+ {
+ result = syntaxNode as T;
+ return true;
+ }
+
+ return TryGetParentSyntax(syntaxNode, out result);
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/BaseGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/BaseGenerator.cs
index 013a057..9dc3302 100644
--- a/src/ProxyInterfaceSourceGenerator/FileGenerators/BaseGenerator.cs
+++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/BaseGenerator.cs
@@ -56,61 +56,103 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
protected string GetPropertyType(IPropertySymbol property)
{
- var propertyTypeAsString = property.Type.ToString();
+ return GetReplacedType(property.Type);
- var existing = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == propertyTypeAsString);
- if (existing is not null)
- {
- if (!_context.ReplacedTypes.ContainsKey(propertyTypeAsString))
- {
- _context.ReplacedTypes.Add(propertyTypeAsString, existing.InterfaceName);
- }
+ //var propertyTypeAsString = property.Type.ToString();
- return existing.InterfaceName;
- }
+ //var existing = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == propertyTypeAsString);
+ //if (existing is not null)
+ //{
+ // if (!_context.ReplacedTypes.ContainsKey(propertyTypeAsString))
+ // {
+ // _context.ReplacedTypes.Add(propertyTypeAsString, existing.InterfaceName);
+ // }
- if (property.Type is INamedTypeSymbol namedTypedSymbol)
- {
- var propertyTypeAsStringToBeModified = propertyTypeAsString;
- foreach (var typeArgument in namedTypedSymbol.TypeArguments)
- {
- var typeArgumentAsString = typeArgument.ToString();
- var exist = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == typeArgumentAsString);
- if (exist is not null)
- {
- if (!_context.ReplacedTypes.ContainsKey(typeArgumentAsString))
- {
- _context.ReplacedTypes.Add(typeArgumentAsString, exist.InterfaceName);
- }
+ // return existing.InterfaceName;
+ //}
- propertyTypeAsStringToBeModified = propertyTypeAsStringToBeModified.Replace(typeArgumentAsString, exist.InterfaceName);
- }
- }
+ //if (property.Type is INamedTypeSymbol namedTypedSymbol)
+ //{
+ // var propertyTypeAsStringToBeModified = propertyTypeAsString;
+ // foreach (var typeArgument in namedTypedSymbol.TypeArguments)
+ // {
+ // var typeArgumentAsString = typeArgument.ToString();
+ // var exist = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == typeArgumentAsString);
+ // if (exist is not null)
+ // {
+ // if (!_context.ReplacedTypes.ContainsKey(typeArgumentAsString))
+ // {
+ // _context.ReplacedTypes.Add(typeArgumentAsString, exist.InterfaceName);
+ // }
- return propertyTypeAsStringToBeModified;
- }
+ // propertyTypeAsStringToBeModified = propertyTypeAsStringToBeModified.Replace(typeArgumentAsString, exist.InterfaceName);
+ // }
+ // }
- return propertyTypeAsString;
+ // return propertyTypeAsStringToBeModified;
+ //}
+
+ //return propertyTypeAsString;
}
protected string GetParameterType(IParameterSymbol property)
{
- var propertyTypeAsString = property.Type.ToString();
+ return GetReplacedType(property.Type);
+ //var propertyTypeAsString = property.Type.ToString();
- var existing = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == propertyTypeAsString);
+ //var existing = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == propertyTypeAsString);
+ //if (existing is not null)
+ //{
+ // if (!_context.ReplacedTypes.ContainsKey(propertyTypeAsString))
+ // {
+ // _context.ReplacedTypes.Add(propertyTypeAsString, existing.InterfaceName);
+ // }
+
+ // return existing.InterfaceName;
+ //}
+
+ //if (property.Type is INamedTypeSymbol namedTypedSymbol)
+ //{
+ // var propertyTypeAsStringToBeModified = propertyTypeAsString;
+ // foreach (var typeArgument in namedTypedSymbol.TypeArguments)
+ // {
+ // var typeArgumentAsString = typeArgument.ToString();
+ // var exist = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == typeArgumentAsString);
+ // if (exist is not null)
+ // {
+ // if (!_context.ReplacedTypes.ContainsKey(typeArgumentAsString))
+ // {
+ // _context.ReplacedTypes.Add(typeArgumentAsString, exist.InterfaceName);
+ // }
+
+ // propertyTypeAsStringToBeModified = propertyTypeAsStringToBeModified.Replace(typeArgumentAsString, exist.InterfaceName);
+ // }
+ // }
+
+ // return propertyTypeAsStringToBeModified;
+ //}
+
+ //return propertyTypeAsString;
+ }
+
+ protected string GetReplacedType(ITypeSymbol property)
+ {
+ var typeSymbolAsString = property.ToString();
+
+ var existing = _context.CandidateInterfaces.Values.FirstOrDefault(x => x.TypeName == typeSymbolAsString);
if (existing is not null)
{
- if (!_context.ReplacedTypes.ContainsKey(propertyTypeAsString))
+ if (!_context.ReplacedTypes.ContainsKey(typeSymbolAsString))
{
- _context.ReplacedTypes.Add(propertyTypeAsString, existing.InterfaceName);
+ _context.ReplacedTypes.Add(typeSymbolAsString, existing.InterfaceName);
}
return existing.InterfaceName;
}
- if (property.Type is INamedTypeSymbol namedTypedSymbol)
+ if (property is INamedTypeSymbol namedTypedSymbol)
{
- var propertyTypeAsStringToBeModified = propertyTypeAsString;
+ var propertyTypeAsStringToBeModified = typeSymbolAsString;
foreach (var typeArgument in namedTypedSymbol.TypeArguments)
{
var typeArgumentAsString = typeArgument.ToString();
@@ -129,7 +171,7 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
return propertyTypeAsStringToBeModified;
}
- return propertyTypeAsString;
+ return typeSymbolAsString;
}
protected INamedTypeSymbol GetType(string name)
diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs
index 1ccebe7..1aeb029 100644
--- a/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs
+++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/PartialInterfacesGenerator.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using System.Linq;
using System.Text;
using Microsoft.CodeAnalysis;
using ProxyInterfaceSourceGenerator.Enums;
@@ -19,17 +18,17 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
{
foreach (var ci in _context.CandidateInterfaces)
{
- yield return GenerateFile(ci.Value.InterfaceName, ci.Value.TypeName, ci.Value.ProxyAll);
+ yield return GenerateFile(ci.Value.Namespace, ci.Value.InterfaceName, ci.Value.TypeName, ci.Value.ProxyAll);
}
}
- private FileData GenerateFile(string interfaceName, string typeName, bool proxyAll)
+ private FileData GenerateFile(string ns, string interfaceName, string typeName, bool proxyAll)
{
var symbol = GetType(typeName);
var file = new FileData(
$"{interfaceName}.cs",
- CreatePartialInterfaceCode(symbol, interfaceName, proxyAll)
+ CreatePartialInterfaceCode(ns, symbol, interfaceName, proxyAll)
);
_context.GeneratedData.Add(new() { InterfaceName = interfaceName, ClassName = null, FileData = file });
@@ -37,9 +36,9 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
return file;
}
- private string CreatePartialInterfaceCode(INamedTypeSymbol symbol, string interfaceName, bool proxyAll) => $@"using System;
+ private string CreatePartialInterfaceCode(string ns, INamedTypeSymbol symbol, string interfaceName, bool proxyAll) => $@"using System;
-namespace {symbol.ContainingNamespace}
+namespace {ns}
{{
public partial interface {interfaceName}
{{
@@ -97,11 +96,8 @@ namespace {symbol.ContainingNamespace}
}
}
- str.AppendLine($" {method.ReturnType} {method.Name}({string.Join(", ", methodParameters)});");
+ str.AppendLine($" {GetReplacedType(method.ReturnType)} {method.Name}({string.Join(", ", methodParameters)});");
str.AppendLine();
-
- //str.AppendLine($" {method.ToMethodText()};");
- //str.AppendLine();
}
return str.ToString();
diff --git a/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs b/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs
index a53c7b2..62b53d2 100644
--- a/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs
+++ b/src/ProxyInterfaceSourceGenerator/FileGenerators/ProxyClassesGenerator.cs
@@ -17,17 +17,17 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
{
foreach (var ci in _context.CandidateInterfaces)
{
- yield return GenerateFile(ci.Value.InterfaceName, ci.Value.ClassName, ci.Value.TypeName, ci.Value.ProxyAll);
+ yield return GenerateFile(ci.Value.Namespace, ci.Value.InterfaceName, ci.Value.ClassName, ci.Value.TypeName, ci.Value.ProxyAll);
}
}
- private FileData GenerateFile(string interfaceName, string className, string typeName, bool proxyAll)
+ private FileData GenerateFile(string ns, string interfaceName, string className, string typeName, bool proxyAll)
{
var symbol = GetType(typeName);
var file = new FileData(
$"{className}Proxy.cs",
- CreateProxyClassCode(symbol, interfaceName, className, proxyAll)
+ CreateProxyClassCode(ns, symbol, interfaceName, className, proxyAll)
);
_context.GeneratedData.Add(new() { InterfaceName = interfaceName, ClassName = className, FileData = file });
@@ -35,22 +35,22 @@ namespace ProxyInterfaceSourceGenerator.FileGenerators
return file;
}
- private string CreateProxyClassCode(INamedTypeSymbol symbol, string interfaceName, string className, bool proxyAll) => $@"using System;
+ private string CreateProxyClassCode(string ns, INamedTypeSymbol symbol, string interfaceName, string className, bool proxyAll) => $@"using System;
using AutoMapper;
-namespace {symbol.ContainingNamespace}
+namespace {ns}
{{
public class {className}Proxy : {interfaceName}
{{
- private readonly IMapper _mapper;
+ private readonly IMapper? _mapper;
- public {className} _Instance {{ get; }}
+ public {symbol} _Instance {{ get; }}
{GeneratePublicProperties(symbol, proxyAll)}
{GeneratePublicMethods(symbol)}
- public {className}Proxy({className} instance)
+ public {className}Proxy({symbol} instance)
{{
_Instance = instance;
@@ -61,6 +61,11 @@ namespace {symbol.ContainingNamespace}
private string GenerateAutoMapper()
{
+ if (_context.ReplacedTypes.Count == 0)
+ {
+ return string.Empty;
+ }
+
var str = new StringBuilder();
str.AppendLine(" _mapper = new MapperConfiguration(cfg =>");
@@ -110,33 +115,38 @@ namespace {symbol.ContainingNamespace}
foreach (var method in MemberHelper.GetPublicMethods(symbol))
{
var methodParameters = new List();
- foreach (var ps in method.Parameters)
- {
- if (ps.GetTypeEnum() == TypeEnum.Complex)
- {
- var type = GetParameterType(ps);
- methodParameters.Add($"{type} {ps.Name}");
- }
- else
- {
- methodParameters.Add($"{ps.Type} {ps.Name}");
- }
- }
-
var invokeParameters = new List();
+
foreach (var ps in method.Parameters)
{
if (ps.GetTypeEnum() == TypeEnum.Complex)
{
+ methodParameters.Add($"{GetParameterType(ps)} {ps.Name}");
+
invokeParameters.Add($"_mapper.Map<{ps.Type}>({ps.Name})");
}
else
{
+ methodParameters.Add($"{ps.Type} {ps.Name}");
+
invokeParameters.Add($"{ps.Name}");
}
}
- str.AppendLine($" public {method.ReturnType} {method.Name}({string.Join(", ", methodParameters)}) => _Instance.{method.Name}({string.Join(", ", invokeParameters)});");
+ string returnTypeAsString;
+ string call;
+ if (method.ReturnType.GetTypeEnum() == TypeEnum.Complex)
+ {
+ returnTypeAsString = GetReplacedType(method.ReturnType);
+ call = $"_mapper.Map<{returnTypeAsString}>(_Instance.{method.Name}({string.Join(", ", invokeParameters)}))";
+ }
+ else
+ {
+ returnTypeAsString = method.ReturnType.ToString();
+ call = $"_Instance.{method.Name}({string.Join(", ", invokeParameters)})";
+ }
+
+ str.AppendLine($" public {returnTypeAsString} {method.Name}({string.Join(", ", methodParameters)}) => {call};");
str.AppendLine();
}
diff --git a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceCodeGenerator.cs b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceCodeGenerator.cs
index 75beffc..f85ae4d 100644
--- a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceCodeGenerator.cs
+++ b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceCodeGenerator.cs
@@ -28,25 +28,35 @@ namespace ProxyInterfaceSourceGenerator
return;
}
- var context = new Context
+ var context1 = new Context
{
GeneratorExecutionContext = ctx,
CandidateInterfaces = receiver.CandidateInterfaces
};
var attributeData = _proxyAttributeGenerator.GenerateFile();
- context.GeneratorExecutionContext.AddSource(attributeData.FileName, SourceText.From(attributeData.Text, Encoding.UTF8));
+ context1.GeneratorExecutionContext.AddSource(attributeData.FileName, SourceText.From(attributeData.Text, Encoding.UTF8));
- var partialInterfacesGenerator = new PartialInterfacesGenerator(context);
+ var context2 = new Context
+ {
+ GeneratorExecutionContext = ctx,
+ CandidateInterfaces = receiver.CandidateInterfaces
+ };
+ var partialInterfacesGenerator = new PartialInterfacesGenerator(context2);
foreach (var data in partialInterfacesGenerator.GenerateFiles())
{
- context.GeneratorExecutionContext.AddSource(data.FileName, SourceText.From(data.Text, Encoding.UTF8));
+ context2.GeneratorExecutionContext.AddSource(data.FileName, SourceText.From(data.Text, Encoding.UTF8));
}
- var proxyClassesGenerator = new ProxyClassesGenerator(context);
+ var context3 = new Context
+ {
+ GeneratorExecutionContext = ctx,
+ CandidateInterfaces = receiver.CandidateInterfaces
+ };
+ var proxyClassesGenerator = new ProxyClassesGenerator(context3);
foreach (var data in proxyClassesGenerator.GenerateFiles())
{
- context.GeneratorExecutionContext.AddSource(data.FileName, SourceText.From(data.Text, Encoding.UTF8));
+ context3.GeneratorExecutionContext.AddSource(data.FileName, SourceText.From(data.Text, Encoding.UTF8));
}
}
}
diff --git a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj
index f524e55..f32e8e2 100644
--- a/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj
+++ b/src/ProxyInterfaceSourceGenerator/ProxyInterfaceSourceGenerator.csproj
@@ -1,7 +1,7 @@
- 0.0.2
+ 0.0.3
netstandard2.0
9
enable
diff --git a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxyData.cs b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxyData.cs
index 8a1cbca..58cc050 100644
--- a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxyData.cs
+++ b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxyData.cs
@@ -2,7 +2,7 @@
namespace ProxyInterfaceSourceGenerator.SyntaxReceiver
{
- internal record ProxyData(string InterfaceName, string TypeName, bool ProxyAll)
+ internal record ProxyData(string Namespace, string InterfaceName, string TypeName, bool ProxyAll)
{
public string ClassName => TypeName.Split('.').Last();
}
diff --git a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs
index 77a0e99..e5fd78f 100644
--- a/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs
+++ b/src/ProxyInterfaceSourceGenerator/SyntaxReceiver/ProxySyntaxReceiver.cs
@@ -2,6 +2,7 @@
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
+using ProxyInterfaceSourceGenerator.Extensions;
namespace ProxyInterfaceSourceGenerator.SyntaxReceiver
{
@@ -19,7 +20,7 @@ namespace ProxyInterfaceSourceGenerator.SyntaxReceiver
private static bool TryGet(InterfaceDeclarationSyntax interfaceDeclarationSyntax, out ProxyData data)
{
- data = new(string.Empty, string.Empty, false);
+ data = new(string.Empty, string.Empty, string.Empty, false);
// TODO : how to check if the InterfaceDeclarationSyntax has 'partial' ?
var attributeLists = interfaceDeclarationSyntax.AttributeLists.FirstOrDefault(x => x.Attributes.Any(a => a.Name.ToString().Equals("ProxyInterfaceGenerator.Proxy")));
@@ -34,8 +35,15 @@ namespace ProxyInterfaceSourceGenerator.SyntaxReceiver
return false;
}
+ string ns = string.Empty;
+ if (SyntaxNodeUtils.TryGetParentSyntax(interfaceDeclarationSyntax, out NamespaceDeclarationSyntax namespaceDeclarationSyntax))
+ {
+ ns = namespaceDeclarationSyntax.Name.ToString();
+ }
+
data = new
(
+ ns,
interfaceDeclarationSyntax.Identifier.ToString(),
argumentList.Arguments[0].Expression.ChildNodes().First().GetText().ToString(),
false //bool.Parse(argumentList.Arguments[1].Expression.GetText().ToString())