-
Notifications
You must be signed in to change notification settings - Fork 127
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #337 from CursedLand/development
Callbacks implementation for MemberCloner
- Loading branch information
Showing
10 changed files
with
193 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
using System; | ||
|
||
namespace AsmResolver.DotNet.Cloning | ||
{ | ||
/// <summary> | ||
/// This implementation that calls the <see cref="MemberClonerListener.OnClonedMember"/> to a callback action. | ||
/// </summary> | ||
public class CallbackCloneListener : MemberClonerListener | ||
{ | ||
|
||
private readonly Action<IMetadataMember, IMetadataMember> _callback; | ||
|
||
/// <summary> | ||
/// Creates a new instance of the <see cref="CallbackCloneListener"/> class. | ||
/// </summary> | ||
/// <param name="callback">The Callback used.</param> | ||
public CallbackCloneListener(Action<IMetadataMember, IMetadataMember> callback) => | ||
_callback = callback; | ||
|
||
/// <inheritdoc/> | ||
public override void OnClonedMember(IMetadataMember original, IMetadataMember cloned) => | ||
_callback(original, cloned); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
namespace AsmResolver.DotNet.Cloning | ||
{ | ||
/// <summary> | ||
/// <see cref="MemberCloner"/> Callback listener that receives calls after cloning process. | ||
/// </summary> | ||
public interface IMemberClonerListener | ||
{ | ||
/// <summary> | ||
/// This function is called for every member that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original member.</param> | ||
/// <param name="cloned">The cloned member.</param> | ||
public void OnClonedMember(IMetadataMember original, IMetadataMember cloned); | ||
/// <summary> | ||
/// This function is called for every type that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original type.</param> | ||
/// <param name="cloned">The cloned type.</param> | ||
public void OnClonedType(TypeDefinition original, TypeDefinition cloned); | ||
/// <summary> | ||
/// This function is called for every method that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original method.</param> | ||
/// <param name="cloned">The cloned method.</param> | ||
public void OnClonedMethod(MethodDefinition original, MethodDefinition cloned); | ||
/// <summary> | ||
/// This function is called for every field that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original field.</param> | ||
/// <param name="cloned">The cloned field.</param> | ||
public void OnClonedField(FieldDefinition original, FieldDefinition cloned); | ||
/// <summary> | ||
/// This function is called for every property that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original property.</param> | ||
/// <param name="cloned">The cloned property.</param> | ||
public void OnClonedProperty(PropertyDefinition original, PropertyDefinition cloned); | ||
/// <summary> | ||
/// This function is called for every event that got cloned. | ||
/// </summary> | ||
/// <param name="original">The original event.</param> | ||
/// <param name="cloned">The cloned event.</param> | ||
public void OnClonedEvent(EventDefinition original, EventDefinition cloned); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
namespace AsmResolver.DotNet.Cloning | ||
{ | ||
/// <inheritdoc/> | ||
public abstract class MemberClonerListener : IMemberClonerListener | ||
{ | ||
/// <inheritdoc/> | ||
public virtual void OnClonedMember(IMetadataMember original, IMetadataMember cloned) { } | ||
/// <inheritdoc/> | ||
public virtual void OnClonedEvent(EventDefinition original, EventDefinition cloned) { } | ||
/// <inheritdoc/> | ||
public virtual void OnClonedField(FieldDefinition original, FieldDefinition cloned) { } | ||
/// <inheritdoc/> | ||
public virtual void OnClonedMethod(MethodDefinition original, MethodDefinition cloned) { } | ||
/// <inheritdoc/> | ||
public virtual void OnClonedProperty(PropertyDefinition original, PropertyDefinition cloned) { } | ||
/// <inheritdoc/> | ||
public virtual void OnClonedType(TypeDefinition original, TypeDefinition cloned) { } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
test/AsmResolver.Tests/Listeners/CustomMemberClonerListener.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
using AsmResolver.DotNet; | ||
using AsmResolver.DotNet.Cloning; | ||
using System; | ||
|
||
namespace AsmResolver.Tests.Listeners | ||
{ | ||
public class CustomMemberClonerListener : MemberClonerListener | ||
{ | ||
public override void OnClonedMethod(MethodDefinition original, MethodDefinition cloned) => | ||
cloned.Name = $"Method_{original.Name}"; | ||
} | ||
} |