private static bool AllImplementationParametersCanBeChangedToByVal(ParameterDeclaration parameter, ModuleBodyElementDeclaration interfaceMember, DeclarationFinder finder) { if (!TryFindParameterIndex(parameter, interfaceMember, out var parameterIndex)) { //This really should never happen. Debug.Fail($"Could not find index for parameter {parameter.IdentifierName} in interface member {interfaceMember.IdentifierName}."); return(false); } var implementations = finder.FindInterfaceImplementationMembers(interfaceMember); return(implementations.All(implementation => ParameterAtIndexCanBeChangedToBePassedByValIfRelatedParameterCan(implementation, parameterIndex, finder))); }
private bool IsInterfaceIssue(ModuleBodyElementDeclaration declaration, DeclarationFinder finder) { if (!IsIssueItself(declaration)) { return(false); } var implementations = finder.FindInterfaceImplementationMembers(declaration); return(implementations.All(implementation => IsIssueItself(implementation) || implementation.References.All(reference => reference.IsAssignment && IsReturnStatement(implementation, reference)))); }
private static void AddByRefIdentifierToImplementations( ModuleBodyElementDeclaration interfaceMember, int parameterIndex, DeclarationFinder finder, IRewriteSession rewriteSession) { var implementationParameters = finder.FindInterfaceImplementationMembers(interfaceMember) .Select(implementation => implementation.Parameters[parameterIndex]); foreach (var parameter in implementationParameters) { AddByRefIdentifier(rewriteSession, parameter); } }
private static bool ThereAreImplementationsAndNoneUsesTheParameter(ParameterDeclaration parameter, ModuleBodyElementDeclaration interfaceMember, DeclarationFinder finder) { if (!TryFindParameterIndex(parameter, interfaceMember, out var parameterIndex)) { //This really should never happen. Debug.Fail($"Could not find index for parameter {parameter.IdentifierName} in interface member {interfaceMember.IdentifierName}."); return(false); } var implementations = finder.FindInterfaceImplementationMembers(interfaceMember).ToList(); //We do not want to report all parameters of not implemented interfaces. return(implementations.Any() && implementations.All(implementation => ParameterAtIndexIsNotUsed(implementation, parameterIndex))); }