public override LocalList <IDeclaredElement> GetMarkedFunctionsFrom(ITreeNode currentNode, IDeclaredElement containingFunction) { var result = new LocalList <IDeclaredElement>(); switch (currentNode) { case IInvocationExpression invocationExpression when PerformanceCriticalCodeStageUtil.IsInvocationExpensive(invocationExpression): case IReferenceExpression referenceExpression when PerformanceCriticalCodeStageUtil.IsCameraMainUsage(referenceExpression): case IEqualityExpression equalityExpressionParam when PerformanceCriticalCodeStageUtil.IsNullComparisonWithUnityObject(equalityExpressionParam, out _): result.Add(containingFunction); break; } return(result); }
private void AnalyzeInvocationExpression(IInvocationExpression invocationExpressionParam, HotMethodAnalyzerContext context) { var reference = (invocationExpressionParam.InvokedExpression as IReferenceExpression)?.Reference; if (reference == null) { return; } var declaredElement = reference.Resolve().DeclaredElement as IMethod; var containingType = declaredElement?.GetContainingType(); if (containingType == null) { return; } if (PerformanceCriticalCodeStageUtil.IsInvocationExpensive(invocationExpressionParam)) { context.MarkCurrentAsCostly(); myConsumer.AddHighlighting(new PerformanceInvocationHighlighting(invocationExpressionParam, reference)); } }