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); }
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)); }
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); } }