private static void HandleMethodParameter(SyntaxNodeAnalysisContext context, ParameterSyntax parameter) { var paramSympol = context.SemanticModel.GetDeclaredSymbol(parameter, context.CancellationToken); if (paramSympol != null) { var isRefCounter = RefCounter.IsRefCounterType(paramSympol.Type); if (isRefCounter) { var param = context.SemanticModel.GetDeclaredSymbolSafe(parameter, context.CancellationToken); if (param != null) { var method = parameter.FirstAncestorOrSelf <MethodDeclarationSyntax>(); var block = method?.Body; if (block == null) { return; } RefCounterStatus status = new RefCounterStatus(); if (method.Identifier.ToString().Equals(KnownSymbol.ReleaseReference)) { status.AcquireReference("param of ReleaseReference", method.GetLocation()); } ProcessLocalOrParamenterVar(context, param, block, status); } } } }
private static void HandleLocalDeclaration(SyntaxNodeAnalysisContext context, LocalDeclarationStatementSyntax localDeclaration) { // 根据声明语句声明的Type(可能是var),获得SymbolInfo var isRefCounter = RefCounter.IsRefCounterType(context.SemanticModel, localDeclaration.Declaration.Type); if (isRefCounter) { foreach (var variable in localDeclaration.Declaration.Variables) { HandleLocalVariable(context, variable); } } }