Skip to content

Commit 16b2b3e

Browse files
committed
getTargetExpression and getTargetReference delegates can be merged
1 parent 4cbde53 commit 16b2b3e

File tree

6 files changed

+23
-34
lines changed

6 files changed

+23
-34
lines changed

src/Castle.Core/DynamicProxy/Contributors/Delegates.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,4 @@ internal delegate MethodEmitter OverrideMethodDelegate(
2323
string name, MethodAttributes attributes, MethodInfo methodToOverride);
2424

2525
internal delegate IExpression GetTargetExpressionDelegate(ClassEmitter @class, MethodInfo method);
26-
27-
internal delegate Reference GetTargetReferenceDelegate(ClassEmitter @class, MethodInfo method);
2826
}

src/Castle.Core/DynamicProxy/Contributors/InterfaceProxyWithOptionalTargetContributor.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2004-2021 Castle Project - http://www.castleproject.org/
1+
// Copyright 2004-2025 Castle Project - http://www.castleproject.org/
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -19,13 +19,9 @@ namespace Castle.DynamicProxy.Contributors
1919

2020
internal class InterfaceProxyWithOptionalTargetContributor : InterfaceProxyWithoutTargetContributor
2121
{
22-
private readonly GetTargetReferenceDelegate getTargetReference;
23-
24-
public InterfaceProxyWithOptionalTargetContributor(INamingScope namingScope, GetTargetExpressionDelegate getTarget,
25-
GetTargetReferenceDelegate getTargetReference)
22+
public InterfaceProxyWithOptionalTargetContributor(INamingScope namingScope, GetTargetExpressionDelegate getTarget)
2623
: base(namingScope, getTarget)
2724
{
28-
this.getTargetReference = getTargetReference;
2925
canChangeTarget = true;
3026
}
3127

@@ -34,7 +30,7 @@ protected override MethodGenerator GetMethodGenerator(MetaMethod method, ClassEm
3430
{
3531
if (!method.Proxyable)
3632
{
37-
return new OptionallyForwardingMethodGenerator(method, overrideMethod, getTargetReference);
33+
return new OptionallyForwardingMethodGenerator(method, overrideMethod, getTarget);
3834
}
3935

4036
return base.GetMethodGenerator(method, @class, overrideMethod);

src/Castle.Core/DynamicProxy/Contributors/InterfaceProxyWithoutTargetContributor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ namespace Castle.DynamicProxy.Contributors
2626

2727
internal class InterfaceProxyWithoutTargetContributor : CompositeTypeContributor
2828
{
29-
private readonly GetTargetExpressionDelegate getTargetExpression;
29+
protected readonly GetTargetExpressionDelegate getTarget;
3030
protected bool canChangeTarget = false;
3131

3232
public InterfaceProxyWithoutTargetContributor(INamingScope namingScope, GetTargetExpressionDelegate getTarget)
3333
: base(namingScope)
3434
{
35-
getTargetExpression = getTarget;
35+
this.getTarget = getTarget;
3636
}
3737

3838
protected override IEnumerable<MembersCollector> GetCollectors()
@@ -56,7 +56,7 @@ protected override MethodGenerator GetMethodGenerator(MetaMethod method, ClassEm
5656
return new MethodWithInvocationGenerator(method,
5757
@class.GetField("__interceptors"),
5858
invocation,
59-
getTargetExpression,
59+
getTarget,
6060
overrideMethod,
6161
null);
6262
}

src/Castle.Core/DynamicProxy/Generators/ForwardingMethodGenerator.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2004-2021 Castle Project - http://www.castleproject.org/
1+
// Copyright 2004-2025 Castle Project - http://www.castleproject.org/
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -20,24 +20,24 @@ namespace Castle.DynamicProxy.Generators
2020

2121
internal class ForwardingMethodGenerator : MethodGenerator
2222
{
23-
private readonly GetTargetReferenceDelegate getTargetReference;
23+
private readonly GetTargetExpressionDelegate getTarget;
2424

2525
public ForwardingMethodGenerator(MetaMethod method, OverrideMethodDelegate overrideMethod,
26-
GetTargetReferenceDelegate getTargetReference)
26+
GetTargetExpressionDelegate getTarget)
2727
: base(method, overrideMethod)
2828
{
29-
this.getTargetReference = getTargetReference;
29+
this.getTarget = getTarget;
3030
}
3131

3232
protected override MethodEmitter BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter @class,
3333
INamingScope namingScope)
3434
{
35-
var targetReference = getTargetReference(@class, MethodToOverride);
35+
var target = getTarget(@class, MethodToOverride);
3636
var arguments = ArgumentsUtil.ConvertToArgumentReferenceExpression(MethodToOverride.GetParameters());
3737

3838
emitter.CodeBuilder.AddStatement(new ReturnStatement(
3939
new MethodInvocationExpression(
40-
targetReference,
40+
target,
4141
MethodToOverride,
4242
arguments) { VirtualCall = true }));
4343
return emitter;

src/Castle.Core/DynamicProxy/Generators/InterfaceProxyWithTargetInterfaceGenerator.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,13 @@ protected override void AddMappingForAdditionalInterfaces(CompositeTypeContribut
5757
protected override InterfaceProxyWithoutTargetContributor GetContributorForAdditionalInterfaces(
5858
INamingScope namingScope)
5959
{
60-
return new InterfaceProxyWithOptionalTargetContributor(namingScope, GetTargetExpression, GetTarget)
60+
return new InterfaceProxyWithOptionalTargetContributor(namingScope, GetTarget)
6161
{ Logger = Logger };
6262
}
6363

64-
private Reference GetTarget(ClassEmitter @class, MethodInfo method)
64+
private IExpression GetTarget(ClassEmitter @class, MethodInfo method)
6565
{
6666
return new AsTypeReference(@class.GetField("__target"), method.DeclaringType);
6767
}
68-
69-
private IExpression GetTargetExpression(ClassEmitter @class, MethodInfo method)
70-
{
71-
return GetTarget(@class, method);
72-
}
7368
}
7469
}

src/Castle.Core/DynamicProxy/Generators/OptionallyForwardingMethodGenerator.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2004-2021 Castle Project - http://www.castleproject.org/
1+
// Copyright 2004-2025 Castle Project - http://www.castleproject.org/
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.
@@ -24,37 +24,37 @@ namespace Castle.DynamicProxy.Generators
2424
internal class OptionallyForwardingMethodGenerator : MethodGenerator
2525
{
2626
// TODO: This class largely duplicates code from Forwarding and Minimalistic generators. Should be refactored to change that
27-
private readonly GetTargetReferenceDelegate getTargetReference;
27+
private readonly GetTargetExpressionDelegate getTarget;
2828

2929
public OptionallyForwardingMethodGenerator(MetaMethod method, OverrideMethodDelegate overrideMethod,
30-
GetTargetReferenceDelegate getTargetReference)
30+
GetTargetExpressionDelegate getTarget)
3131
: base(method, overrideMethod)
3232
{
33-
this.getTargetReference = getTargetReference;
33+
this.getTarget = getTarget;
3434
}
3535

3636
protected override MethodEmitter BuildProxiedMethodBody(MethodEmitter emitter, ClassEmitter @class,
3737
INamingScope namingScope)
3838
{
39-
var targetReference = getTargetReference(@class, MethodToOverride);
39+
var target = getTarget(@class, MethodToOverride);
4040

4141
emitter.CodeBuilder.AddStatement(
4242
new IfNullExpression(
43-
targetReference,
43+
target,
4444
IfNull(emitter.ReturnType),
45-
IfNotNull(targetReference)));
45+
IfNotNull(target)));
4646

4747
return emitter;
4848
}
4949

50-
private IStatement IfNotNull(Reference targetReference)
50+
private IStatement IfNotNull(IExpression target)
5151
{
5252
var statements = new BlockStatement();
5353
var arguments = ArgumentsUtil.ConvertToArgumentReferenceExpression(MethodToOverride.GetParameters());
5454

5555
statements.AddStatement(new ReturnStatement(
5656
new MethodInvocationExpression(
57-
targetReference,
57+
target,
5858
MethodToOverride,
5959
arguments) { VirtualCall = true }));
6060
return statements;

0 commit comments

Comments
 (0)