protected ShowMethodCallsBulbActionBase(IMethodDeclaration methodDeclaration, ShowCallsType callsType)
        {
            var declaredElement = methodDeclaration.DeclaredElement;

            Assertion.AssertNotNull(declaredElement, "declared is null, should be impossible");

            myMethod  = new DeclaredElementInstance <IClrDeclaredElement>(declaredElement);
            CallsType = callsType;
        }
        public static string GetPerformanceCriticalShowCallsText(ShowCallsType type)
        {
            switch (type)
            {
            case ShowCallsType.INCOMING:
                return(INCOMING_CALLS_MESSAGE);

            case ShowCallsType.OUTGOING:
                return(OUTGOING_CALLS_MESSAGE);

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
        public static Func <CallHierarchyFindResult, bool> GetSimpleFilter(
            ISolution solution,
            ICallGraphContextProvider provider,
            ShowCallsType type)
        {
            switch (type)
            {
            case ShowCallsType.INCOMING:
            {
                return(result =>
                    {
                        solution.Locks.AssertReadAccessAllowed();

                        var referenceElement = result.ReferenceElement;
                        var csharpTreeNode = referenceElement as ICSharpTreeNode;
                        var containing = csharpTreeNode?.GetContainingFunctionLikeDeclarationOrClosure();
                        var declaredElement = containing?.DeclaredElement;

                        return provider.IsMarkedGlobal(declaredElement);
                    });
            }

            case ShowCallsType.OUTGOING:
            {
                return(result =>
                    {
                        solution.Locks.AssertReadAccessAllowed();

                        var referenceElement = result.ReferenceElement;
                        var identifier = referenceElement as ICSharpIdentifier;
                        var referenceExpression = ReferenceExpressionNavigator.GetByNameIdentifier(identifier);
                        var declaredElement = referenceExpression?.Reference.Resolve().DeclaredElement;

                        if (declaredElement == null)
                        {
                            var referenceName = referenceElement as IReferenceName;
                            var objectCreationExpression = ObjectCreationExpressionNavigator.GetByTypeName(referenceName);

                            declaredElement = objectCreationExpression?.Reference?.Resolve().DeclaredElement;
                        }

                        return provider.IsMarkedGlobal(declaredElement);
                    });
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
        private void ShowCalls(CallHierarchyExplorerViewManager manager,
                               Func <CallHierarchyFindResult, bool> filter,
                               DeclaredElementInstance <IClrDeclaredElement> start,
                               ShowCallsType callType)
        {
            var text = Text;

            switch (callType)
            {
            case ShowCallsType.INCOMING:
                text += " to " + start.Element.ShortName;
                manager.ShowIncoming(start, text, filter);
                break;

            case ShowCallsType.OUTGOING:
                text += " from " + start.Element.ShortName;
                manager.ShowOutgoing(start, text, filter);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
 public ShowBurstCallsBulbAction([NotNull] IMethodDeclaration methodDeclaration, ShowCallsType type)
     : base(methodDeclaration, type)
 {
 }
예제 #6
0
 public ShowExpensiveCallsBulbAction(IMethodDeclaration methodDeclaration, ShowCallsType callsType)
     : base(methodDeclaration, callsType)
 {
 }
 public ShowPerformanceCriticalCallsBulbAction(IMethodDeclaration methodDeclaration, ShowCallsType callsType)
     : base(methodDeclaration, callsType)
 {
 }