unity/EditorPlugin/Profiler/Adapters/ReflectionBasedAdapters/SnapshotNavigation/TreeViewControllerAdapter.cs (108 lines of code) (raw):

#nullable enable using System; using JetBrains.Diagnostics; using JetBrains.Rider.Unity.Editor.Profiler.Adapters.Interfaces; namespace JetBrains.Rider.Unity.Editor.Profiler.Adapters.ReflectionBasedAdapters.SnapshotNavigation { internal class TreeViewControllerAdapter : ITreeViewControllerAdapter { private static readonly ILog ourLogger = Log.GetLog(nameof(TreeViewControllerAdapter)); private readonly TreeViewControllerReflectionData? myReflectionData; private readonly object myTreeViewController; internal TreeViewControllerAdapter(object treeViewController, TreeViewControllerReflectionData? reflectionData) { myTreeViewController = treeViewController; myReflectionData = reflectionData; } public event Action<int> ItemDoubleClicked { add { var doubleClickedCallback = GetDoubleClickedCallback() as Action<int>; doubleClickedCallback += value; SetDoubleClickedCallback(doubleClickedCallback); } remove { var doubleClickedCallback = GetDoubleClickedCallback() as Action<int>; doubleClickedCallback -= value; SetDoubleClickedCallback(doubleClickedCallback!); } } public event Action<int> ContextClickItem { add { var contextClickItemCallback = GetContextClickItemCallback() as Action<int>; contextClickItemCallback += value; SetContextClickItemCallback(contextClickItemCallback); } remove { var contextClickItemCallback = GetContextClickItemCallback() as Action<int>; contextClickItemCallback -= value; SetContextClickItemCallback(contextClickItemCallback!); } } private object? GetDoubleClickedCallback() { if (myReflectionData == null) { ourLogger.Verbose($"Can't get {nameof(GetDoubleClickedCallback)}: {nameof(myReflectionData)} is null."); return null; } if (myReflectionData.ItemDoubleClickedCallbackPropertyInfo == null) { ourLogger.Verbose( $"Can't get {nameof(GetDoubleClickedCallback)}: {nameof(myReflectionData.ItemDoubleClickedCallbackPropertyInfo)} is null."); return null; } return myReflectionData.ItemDoubleClickedCallbackPropertyInfo.GetValue(myTreeViewController); } private void SetDoubleClickedCallback(object value) { if (myReflectionData == null) { ourLogger.Verbose($"Can't call {nameof(SetDoubleClickedCallback)}: {nameof(myReflectionData)} is null."); return; } if (myReflectionData.ItemDoubleClickedCallbackPropertyInfo == null) { ourLogger.Verbose( $"Can't get {nameof(SetDoubleClickedCallback)}: {nameof(myReflectionData.ItemDoubleClickedCallbackPropertyInfo)} is null."); return; } myReflectionData.ItemDoubleClickedCallbackPropertyInfo.SetValue(myTreeViewController, value); } private object? GetContextClickItemCallback() { if (myReflectionData == null) { ourLogger.Verbose($"Can't get {nameof(GetContextClickItemCallback)}: {nameof(myReflectionData)} is null."); return null; } if (myReflectionData.ContextClickItemCallback == null) { ourLogger.Verbose( $"Can't get {nameof(GetContextClickItemCallback)}: {nameof(myReflectionData.ContextClickItemCallback)} is null."); return null; } return myReflectionData.ContextClickItemCallback.GetValue(myTreeViewController); } private void SetContextClickItemCallback(object value) { if (myReflectionData == null) { ourLogger.Verbose($"Can't call {nameof(SetContextClickItemCallback)}: {nameof(myReflectionData)} is null."); return; } if (myReflectionData.ContextClickItemCallback == null) { ourLogger.Verbose( $"Can't get {nameof(SetContextClickItemCallback)}: {nameof(myReflectionData.ContextClickItemCallback)} is null."); return; } myReflectionData.ContextClickItemCallback.SetValue(myTreeViewController, value); } } }