Exemple #1
0
 public static void CalcAssignmentValue(ExpressionSyntax variable, BlockSyntax block, SemanticModel semanticModel, CancellationToken cancellationToken,
                                        RefCounterStatus refCounterStatus)
 {
     if (InitializeFromCreation(variable))
     {
         refCounterStatus.IncAssignCounter("initialize from new", variable.GetLocation());
         refCounterStatus.AcquireReference("init from new", variable.GetLocation());
     }
     else if (InitializeFromTypeCastParameter(variable, semanticModel, cancellationToken, out var param))
     {
         refCounterStatus.IncAssignCounter("init cast from param", variable.GetLocation());
         refCounterStatus.RemainRef("init cast from param", variable.GetLocation());
         if (RightOfAssignmentUtils.RightSideOfAssignmentCount(param, block, semanticModel, cancellationToken) > 1)
         {
             refCounterStatus.Skip("cast from param also assigned to others", variable.GetLocation());
         }
     }
     else if (InitializeFromNonGetMethod(variable, semanticModel, cancellationToken))
     {
         refCounterStatus.IncAssignCounter("initialize from non-get method", variable.GetLocation());
         refCounterStatus.AcquireReference("init from non-get method", variable.GetLocation());
     }
     else if (InitializeFromGetMethod(variable, semanticModel, cancellationToken))
     {
         refCounterStatus.IncAssignCounter("initialize from get method", variable.GetLocation());
         refCounterStatus.RemainRef("init from get method", variable.GetLocation());
     }
     else if (InitializeFromProperty(variable, semanticModel, cancellationToken))
     {
         refCounterStatus.IncAssignCounter("initialize from field/property", variable.GetLocation());
         refCounterStatus.RemainRef("init from property", variable.GetLocation());
         // nothing
     }
     else if (InitializeFromElement(variable, semanticModel, cancellationToken))
     {
         refCounterStatus.IncAssignCounter("initialize from element access", variable.GetLocation());
         refCounterStatus.RemainRef("init from element access", variable.GetLocation());
     }
     else // assigned from other local variable, class field, or other expression
     {
         refCounterStatus.IncAssignCounter("initialize from unkown", variable.GetLocation());
         refCounterStatus.Skip("unsupported initialization", variable.GetLocation());
     }
 }
Exemple #2
0
        private static void ProcessLocalOrParamenterVar(SyntaxNodeAnalysisContext context, ISymbol local,
                                                        BlockSyntax block, RefCounterStatus status)
        {
            RightOfAssignmentUtils.ProcessRightSideOfAssignment(local, block, context.SemanticModel,
                                                                context.CancellationToken, status);

            SystemCollectionUtils.ProcessAddedToCollection(local, block, context.SemanticModel, context.CancellationToken,
                                                           status);
            LeftOfAssignmentUtils.ProcessLeftSideOfAssignment(local, block, context.SemanticModel,
                                                              context.CancellationToken, status);

            ChangeReferenceMethodUtils.ProcessIncDelRefInvocation(local, block, context.SemanticModel, context.CancellationToken,
                                                                  status);

            AssignmentUtils.ProcessOutRefInvocation(local, block, context.SemanticModel, context.CancellationToken, status);

            ReturnUtils.ProcessReturnStatement(local, block, context.SemanticModel, context.CancellationToken, status);

            ReportError(context, local, status);
        }