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 CallGraphContextTag GetNodeContext([NotNull] ITreeNode node, [NotNull] ICallGraphContextProvider contextProvider)
        {
            var declaredElement = CallGraphContextProviderEx.ExtractDeclaredElementForProvider(node);

            if (declaredElement == null)
            {
                return(CallGraphContextTag.NONE);
            }

            switch (myProcessKind)
            {
            case DaemonProcessKind.VISIBLE_DOCUMENT:
            {
                if (contextProvider.IsMarkedLocal(declaredElement, myGraphDataElement))
                {
                    return(contextProvider.ContextTag);
                }

                break;
            }

            case DaemonProcessKind.GLOBAL_WARNINGS:
            {
                if (contextProvider.IsMarkedGlobal(declaredElement))
                {
                    return(contextProvider.ContextTag);
                }

                break;
            }
            }

            return(CallGraphContextTag.NONE);
        }
Exemple #3
0
        public static bool IsMarkedSweaDependent(
            [CanBeNull] this ICallGraphContextProvider contextProvider,
            [CanBeNull] IDeclaredElement declaredElement,
            [CanBeNull] SolutionAnalysisConfiguration configuration)
        {
            if (contextProvider == null || declaredElement == null || configuration == null)
            {
                return(false);
            }

            return(UnityCallGraphUtil.IsCallGraphReady(configuration)
                ? contextProvider.IsMarkedGlobal(declaredElement)
                : contextProvider.IsMarkedLocal(declaredElement));
        }
Exemple #4
0
        public static bool IsMarkedStage(
            [CanBeNull] this ICallGraphContextProvider contextProvider,
            [CanBeNull] IDeclaredElement declaredElement,
            [CanBeNull] IReadOnlyCallGraphContext context)
        {
            if (contextProvider == null || declaredElement == null || context == null)
            {
                return(false);
            }

            switch (context.Kind)
            {
            case DaemonProcessKind.VISIBLE_DOCUMENT:
                return(contextProvider.IsMarkedLocal(declaredElement, context.DataElement));

            case DaemonProcessKind.GLOBAL_WARNINGS:
                return(contextProvider.IsMarkedGlobal(declaredElement));

            default:
                return(false);
            }
        }