public override LocalList <IDeclaredElement> GetRootMarksFromNode(ITreeNode currentNode,
                                                                          IDeclaredElement containingFunction)
        {
            var result            = base.GetRootMarksFromNode(currentNode, containingFunction);
            var coroutineOrInvoke = ExtractCoroutineOrInvokeRepeating(currentNode);

            if (coroutineOrInvoke != null)
            {
                result.Add(coroutineOrInvoke);
            }

            // it means we are in functional type member like methodDeclaration
            if (containingFunction == null)
            {
                return(result);
            }

            var declaration = currentNode as ITypeMemberDeclaration;
            var typeMember  = declaration?.DeclaredElement;

            if (PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(typeMember))
            {
                result.Add(typeMember);
            }

            return(result);
        }
        public override LocalList <IDeclaredElement> GetRootMarksFromNode(ITreeNode currentNode,
                                                                          IDeclaredElement containingFunction)
        {
            var result            = new LocalList <IDeclaredElement>();
            var coroutineOrInvoke = ExtractCoroutineOrInvokeRepeating(currentNode);

            if (coroutineOrInvoke != null)
            {
                result.Add(coroutineOrInvoke);
            }

            // it means we are in functional type member like methodDeclaration
            if (containingFunction == null)
            {
                return(result);
            }

            var functionDeclaration = currentNode as IFunctionDeclaration;
            var hasComment          = UnityCallGraphUtil.HasAnalysisComment(functionDeclaration, MarkId, ReSharperControlConstruct.Kind.Restore);

            if (hasComment)
            {
                result.Add(functionDeclaration.DeclaredElement);
            }

            var declaration = currentNode as ITypeMemberDeclaration;
            var typeMember  = declaration?.DeclaredElement;

            if (PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(typeMember))
            {
                result.Add(typeMember);
            }

            return(result);
        }
        private bool IsPerformanceCriticalDeclaration(ITreeNode element)
        {
            if (!(element is ICSharpDeclaration declaration))
            {
                return(false);
            }

            var declaredElement = declaration.DeclaredElement;

            if (declaredElement == null)
            {
                return(false);
            }

            if (myProcessKind == DaemonProcessKind.GLOBAL_WARNINGS)
            {
                var id = myProvider.GetElementId(declaredElement);
                if (!id.HasValue)
                {
                    return(false);
                }

                return(myCallGraphSwaExtensionProvider.IsMarkedByCallGraphAnalyzer(
                           myPerformanceCriticalCodeCallGraphMarksProvider.Id,
                           true, id.Value));
            }

            return(PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(myAPI, declaration));
        }
示例#4
0
        public bool IsAvailable(IUserDataHolder cache)
        {
            var methodDeclaration = myMethodDeclaration;

            if (methodDeclaration == null)
            {
                return(false);
            }

            var declaredElement = methodDeclaration.DeclaredElement;

            return(declaredElement != null && methodDeclaration.IsValid() &&
                   !PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(methodDeclaration));
        }
        public static bool IsAvailable([CanBeNull] IMethodDeclaration methodDeclaration)
        {
            if (methodDeclaration == null)
            {
                return(false);
            }

            methodDeclaration.GetPsiServices().Locks.AssertReadAccessAllowed();

            var declaredElement = methodDeclaration.DeclaredElement;

            return(declaredElement != null && methodDeclaration.IsValid() &&
                   !PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(methodDeclaration));
        }
        public bool IsAvailable(IUserDataHolder cache)
        {
            var identifier        = myDataProvider.GetSelectedElement <ITreeNode>() as ICSharpIdentifier;
            var methodDeclaration = MethodDeclarationNavigator.GetByNameIdentifier(identifier);

            if (methodDeclaration == null)
            {
                return(false);
            }

            var declaredElement = methodDeclaration.DeclaredElement;

            return(declaredElement != null && methodDeclaration.IsValid() &&
                   !PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(methodDeclaration));
        }
        public override LocalList <IDeclaredElement> GetMarkedFunctionsFrom(ITreeNode currentNode, IDeclaredElement containingFunction)
        {
            var result = new LocalList <IDeclaredElement>();

            if (PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(myUnityApi, currentNode))
            {
                result.Add(containingFunction);
            }

            var coroutineOrInvoke = ExtractCoroutineOrInvokeRepeating(currentNode);

            if (coroutineOrInvoke != null)
            {
                result.Add(coroutineOrInvoke);
            }

            return(result);
        }
示例#8
0
 public void ProcessBeforeInterior(ITreeNode element)
 {
     IsPerformanceCriticalCodeFound =
         PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(element);
 }
示例#9
0
 protected override bool IsMarkedFast(IDeclaredElement declaredElement) =>
 PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(declaredElement);
示例#10
0
 public override void ProcessBeforeInterior(ITreeNode element)
 {
     ProcessingIsFinished = PerformanceCriticalCodeStageUtil.IsPerformanceCriticalRootMethod(element);
 }