diff --git a/ProxyInterfaceSourceGenerator Solution.sln.DotSettings b/ProxyInterfaceSourceGenerator Solution.sln.DotSettings
index db9ce64..860b238 100644
--- a/ProxyInterfaceSourceGenerator Solution.sln.DotSettings
+++ b/ProxyInterfaceSourceGenerator Solution.sln.DotSettings
@@ -1,2 +1,3 @@
+ True
True
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumer/Properties/launchSettings.json b/src-examples/ProxyInterfaceConsumer/Properties/launchSettings.json
index 33504c9..5a2b0d3 100644
--- a/src-examples/ProxyInterfaceConsumer/Properties/launchSettings.json
+++ b/src-examples/ProxyInterfaceConsumer/Properties/launchSettings.json
@@ -1,8 +1,11 @@
{
- "profiles": {
- "WSL": {
- "commandName": "WSL2",
- "distributionName": ""
+ "profiles": {
+ "WSL": {
+ "commandName": "WSL2",
+ "distributionName": ""
+ },
+ "ProxyInterfaceConsumer": {
+ "commandName": "Project"
+ }
}
- }
}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj b/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
index 46eff05..8c17c0a 100644
--- a/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
+++ b/src-examples/ProxyInterfaceConsumer/ProxyInterfaceConsumer.csproj
@@ -1,9 +1,8 @@
- net5.0
+ net6.0
Exe
- 9
enable
@@ -14,6 +13,7 @@
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/IGeneratorExecutionContext.cs b/src-examples/ProxyInterfaceConsumerForPnP/IGeneratorExecutionContext.cs
deleted file mode 100644
index 06adf82..0000000
--- a/src-examples/ProxyInterfaceConsumerForPnP/IGeneratorExecutionContext.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace ProxyInterfaceConsumer
-{
- // [ProxyInterfaceGenerator.Proxy(typeof(Microsoft.CodeAnalysis.GeneratorExecutionContext))]
- public partial interface IGeneratorExecutionContext
- {
- }
-}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/IPersonTT.cs b/src-examples/ProxyInterfaceConsumerForPnP/IPersonTT.cs
deleted file mode 100644
index 16df005..0000000
--- a/src-examples/ProxyInterfaceConsumerForPnP/IPersonTT.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace ProxyInterfaceConsumer
-{
- [ProxyInterfaceGenerator.Proxy(typeof(ProxyInterfaceConsumer.PersonTT<,>))]
- public partial interface IPersonTT
- where T1 : struct
- where T2 : class, new()
- {
- }
-}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientContextProxy.cs b/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientContextProxy.cs
new file mode 100644
index 0000000..f960559
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientContextProxy.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Threading.Tasks;
+using Microsoft.SharePoint.Client;
+
+// ReSharper disable once CheckNamespace
+namespace ProxyInterfaceConsumerForPnP.Interfaces;
+
+[SuppressMessage("ReSharper", "InconsistentNaming")]
+public partial class ClientContextProxy
+{
+ public Task ExecuteQueryRetryAsync(Interfaces.IClientRuntimeContext clientContext, int retryCount = 10, string? userAgent = null)
+ {
+ ClientRuntimeContext clientObject_ = Mapster.TypeAdapter.Adapt(clientContext);
+ return clientObject_.ExecuteQueryRetryAsync(retryCount, userAgent);
+ }
+
+ public void LoadOriginal(T clientObject, params Expression>[] retrievals)
+ where T : ClientObject
+ {
+ T clientObject_ = clientObject;
+ Expression>[] retrievals_ = retrievals;
+ _Instance.Load(clientObject_, retrievals_);
+ }
+
+ public void Load(Interfaces.IClientObject clientObject, params Expression>[] retrievals)
+ where TSource : Interfaces.IClientObject
+ where TTarget : ClientObject
+ {
+ TTarget clientObject_ = Mapster.TypeAdapter.Adapt(clientObject);
+ Expression>[] retrievals_ = retrievals.Select(MapExpression).ToArray();
+
+ _Instance.Load(clientObject_, retrievals_);
+ }
+
+ private static Expression> MapExpression(Expression> expression)
+ where TSource : Interfaces.IClientObject
+ where TTarget : ClientObject
+ {
+ var parameterExpression = Expression.Parameter(typeof(TTarget));
+
+ Expression memberAccessExpression;
+ switch (expression.Body)
+ {
+ case MemberExpression memberExpression:
+ memberAccessExpression = Expression.PropertyOrField(parameterExpression, memberExpression.Member.Name);
+ break;
+
+ case UnaryExpression unaryExpression:
+ var expressionOperand = (MemberExpression)unaryExpression.Operand;
+ memberAccessExpression = Expression.PropertyOrField(parameterExpression, expressionOperand.Member.Name);
+ memberAccessExpression = Expression.Convert(memberAccessExpression, typeof(object));
+ break;
+
+ default:
+ throw new NotSupportedException();
+
+ }
+
+ return Expression.Lambda>(memberAccessExpression, parameterExpression);
+ }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientRuntimeContextExtensions.cs b/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientRuntimeContextExtensions.cs
new file mode 100644
index 0000000..49b0536
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Implementations/ClientRuntimeContextExtensions.cs
@@ -0,0 +1,14 @@
+using System.Threading.Tasks;
+using Microsoft.SharePoint.Client;
+using ProxyInterfaceConsumerForPnP.Interfaces;
+
+namespace ProxyInterfaceConsumerForPnP.Implementations;
+
+public static class ClientRuntimeContextExtensions
+{
+ public static Task ExecuteQueryRetryAsync(this IClientRuntimeContext clientContext, int retryCount = 10, string? userAgent = null)
+ {
+ ClientRuntimeContext clientObject_ = Mapster.TypeAdapter.Adapt(clientContext);
+ return clientObject_.ExecuteQueryRetryAsync(retryCount, userAgent);
+ }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientContext.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientContext.cs
new file mode 100644
index 0000000..4fbe561
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientContext.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Linq.Expressions;
+using Microsoft.SharePoint.Client;
+
+namespace ProxyInterfaceConsumerForPnP.Interfaces
+{
+ [ProxyInterfaceGenerator.Proxy(typeof(ClientContext))]
+ public partial interface IClientContext : IClientRuntimeContext
+ {
+ void Load(IClientObject clientObject, params Expression>[] retrievals)
+ where TSource : IClientObject
+ where TTarget : ClientObject;
+ }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientObject.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientObject.cs
similarity index 74%
rename from src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientObject.cs
rename to src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientObject.cs
index 2a6e0a3..66c266d 100644
--- a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientObject.cs
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientObject.cs
@@ -1,4 +1,4 @@
-namespace ProxyInterfaceConsumer.PnP
+namespace ProxyInterfaceConsumerForPnP.Interfaces
{
[ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.ClientObject))]
public partial interface IClientObject
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientRuntimeContext.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientRuntimeContext.cs
similarity index 77%
rename from src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientRuntimeContext.cs
rename to src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientRuntimeContext.cs
index 5baef56..d94cb3d 100644
--- a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientRuntimeContext.cs
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IClientRuntimeContext.cs
@@ -1,4 +1,4 @@
-namespace ProxyInterfaceConsumer.PnP
+namespace ProxyInterfaceConsumerForPnP.Interfaces
{
[ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.ClientRuntimeContext))]
public partial interface IClientRuntimeContext
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IListCollection.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IListCollection.cs
new file mode 100644
index 0000000..11f2db1
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IListCollection.cs
@@ -0,0 +1,10 @@
+//using System.Collections;
+//using System.Linq;
+
+//namespace ProxyInterfaceConsumerForPnP.Interfaces
+//{
+// [ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.ListCollection))]
+// public partial interface IProxyListCollection: IClientObject, IEnumerable, IQueryable
+// {
+// }
+//}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PnP/ISecurableObject.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/ISecurableObject.cs
similarity index 80%
rename from src-examples/ProxyInterfaceConsumerForPnP/PnP/ISecurableObject.cs
rename to src-examples/ProxyInterfaceConsumerForPnP/Interfaces/ISecurableObject.cs
index 67e67c4..37e90a7 100644
--- a/src-examples/ProxyInterfaceConsumerForPnP/PnP/ISecurableObject.cs
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/ISecurableObject.cs
@@ -1,4 +1,4 @@
-namespace ProxyInterfaceConsumer.PnP
+namespace ProxyInterfaceConsumerForPnP.Interfaces
{
[ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.SecurableObject))]
public partial interface ISecurableObject : IClientObject
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IUser.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IUser.cs
new file mode 100644
index 0000000..ba4eb8b
--- /dev/null
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IUser.cs
@@ -0,0 +1,7 @@
+namespace ProxyInterfaceConsumerForPnP.Interfaces
+{
+ [ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.User))]
+ public partial interface IUser
+ {
+ }
+}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IWeb.cs b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IWeb.cs
similarity index 74%
rename from src-examples/ProxyInterfaceConsumerForPnP/PnP/IWeb.cs
rename to src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IWeb.cs
index a79c295..d3f013b 100644
--- a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IWeb.cs
+++ b/src-examples/ProxyInterfaceConsumerForPnP/Interfaces/IWeb.cs
@@ -1,4 +1,4 @@
-namespace ProxyInterfaceConsumer.PnP
+namespace ProxyInterfaceConsumerForPnP.Interfaces
{
[ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.Web))]
public partial interface IWeb: ISecurableObject
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PersonTT.cs b/src-examples/ProxyInterfaceConsumerForPnP/PersonTT.cs
deleted file mode 100644
index b474a58..0000000
--- a/src-examples/ProxyInterfaceConsumerForPnP/PersonTT.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-namespace ProxyInterfaceConsumer
-{
- public class PersonTT
- where T1 : struct
- where T2 : class, new()
- {
- public T1 TVal1 { get; set; }
-
- public T2 TVal2 { get; set; }
-
- public void Call(int x, T1 t1, T2 t2)
- {
- }
- }
-}
\ No newline at end of file
diff --git a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientContext.cs b/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientContext.cs
deleted file mode 100644
index 82ba658..0000000
--- a/src-examples/ProxyInterfaceConsumerForPnP/PnP/IClientContext.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-using System;
-using System.Linq;
-using System.Linq.Expressions;
-using System.Security.Cryptography.X509Certificates;
-using AutoMapper;
-using Mapster;
-using Microsoft.SharePoint.Client;
-
-namespace ProxyInterfaceConsumer.PnP
-{
- [ProxyInterfaceGenerator.Proxy(typeof(Microsoft.SharePoint.Client.ClientContext))]
- public partial interface IClientContext: IClientRuntimeContext
- {
- // public virtual void X();
- }
-}
-
-namespace ProxyInterfaceConsumer.PnP
-{
- public class CustomResolver : IValueResolver