Exemple #1
0
        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)));
        }
Exemple #2
0
        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))));
        }
Exemple #3
0
        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)));
        }