Exemple #1
0
 protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
 {
     return(declaration.IdentifierName.Contains("_") &&
            (declaration.Accessibility == Accessibility.Public ||
             declaration.Accessibility == Accessibility.Implicit) &&
            declaration.ParentDeclaration.DeclarationType.HasFlag(DeclarationType.ClassModule) &&
            !finder.FindEventHandlers().Contains(declaration) &&
            !(declaration is ModuleBodyElementDeclaration member && member.IsInterfaceImplementation));
 }
 protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder, string[] whitelistedNames)
 {
     return(!string.IsNullOrEmpty(declaration.IdentifierName) &&
            !IgnoreDeclarationTypes.Contains(declaration.DeclarationType) &&
            !(declaration.Context is VBAParser.LineNumberLabelContext) &&
            (declaration.ParentDeclaration == null ||
             !IgnoreDeclarationTypes.Contains(declaration.ParentDeclaration.DeclarationType) &&
             !finder.FindEventHandlers().Contains(declaration.ParentDeclaration)) &&
            !whitelistedNames.Contains(declaration.IdentifierName) &&
            !VBAIdentifierValidator.IsMeaningfulIdentifier(declaration.IdentifierName));
 }
 protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
 {
     return(!declaration.References
            .Any(reference => !reference.ParentScoping.Equals(declaration)) &&  // ignore recursive/self-referential calls
            !finder.FindEventHandlers().Contains(declaration) &&
            !IsClassLifeCycleHandler(declaration) &&
            !(declaration is ModuleBodyElementDeclaration member &&
              (member.IsInterfaceMember ||
               member.IsInterfaceImplementation)) &&
            !declaration.Annotations
            .Any(pta => pta.Annotation is ITestAnnotation) &&
            !IsDocumentEventHandler(declaration) &&
            !IsEntryPoint(declaration));
 }
Exemple #4
0
        private static void AddByRefIdentifierToHandlers(
            EventDeclaration eventDeclaration,
            int parameterIndex,
            DeclarationFinder finder,
            IRewriteSession rewriteSession)
        {
            var handlers = finder.FindEventHandlers(eventDeclaration)
                           .Select(implementation => implementation.Parameters[parameterIndex]);

            foreach (var parameter in handlers)
            {
                AddByRefIdentifier(rewriteSession, parameter);
            }
        }
Exemple #5
0
        private static bool ParameterIsResult(ParameterDeclaration parameter, DeclarationFinder finder)
        {
            var enclosingMember = parameter.ParentDeclaration;

            if (!(enclosingMember is ModuleBodyElementDeclaration member))
            {
                return(false);
            }

            return(!member.IsInterfaceImplementation &&
                   member.DeclarationType != DeclarationType.LibraryFunction &&
                   member.DeclarationType != DeclarationType.LibraryProcedure &&
                   !finder.FindEventHandlers().Contains(member));
        }
        protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
        {
            if (!(declaration is ParameterDeclaration parameter) ||
                !parameter.IsImplicitByRef ||
                parameter.IsParamArray
                //Exclude parameters of Declare statements
                || !(parameter.ParentDeclaration is ModuleBodyElementDeclaration enclosingMethod))
            {
                return(false);
            }

            return(!IsPropertyMutatorRHSParameter(enclosingMethod, parameter) &&
                   !enclosingMethod.IsInterfaceImplementation &&
                   !finder.FindEventHandlers().Contains(enclosingMethod));
        }
Exemple #7
0
        protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
        {
            if (!(declaration is ModuleBodyElementDeclaration member) ||
                member.IsInterfaceImplementation ||
                member.IsInterfaceMember ||
                finder.FindEventHandlers().Contains(member) ||
                member.Parameters.Count(param => param.IsByRef && !param.IsParamArray) != 1)
            {
                return(false);
            }

            var parameter           = member.Parameters.First(param => param.IsByRef && !param.IsParamArray);
            var parameterReferences = parameter.References.ToList();

            return(parameterReferences.Any(reference => IsAssignment(reference, finder)));
        }
Exemple #8
0
        private static bool AllHandlerParametersCanBeChangedToByVal(ParameterDeclaration parameter, EventDeclaration eventDeclaration, DeclarationFinder finder)
        {
            if (!TryFindParameterIndex(parameter, eventDeclaration, out var parameterIndex))
            {
                //This really should never happen.
                Debug.Fail($"Could not find index for parameter {parameter.IdentifierName} in event {eventDeclaration.IdentifierName}.");
                return(false);
            }

            if (!eventDeclaration.IsUserDefined)
            {
                return(false);
            }

            var handlers = finder.FindEventHandlers(eventDeclaration);

            return(handlers.All(handler => ParameterAtIndexCanBeChangedToBePassedByValIfRelatedParameterCan(handler, parameterIndex, finder)));
        }
        private static bool ThereAreHandlersAndNoneUsesTheParameter(ParameterDeclaration parameter, EventDeclaration eventDeclaration, DeclarationFinder finder)
        {
            if (!TryFindParameterIndex(parameter, eventDeclaration, out var parameterIndex))
            {
                //This really should never happen.
                Debug.Fail($"Could not find index for parameter {parameter.IdentifierName} in event {eventDeclaration.IdentifierName}.");
                return(false);
            }

            if (!eventDeclaration.IsUserDefined)
            {
                return(false);
            }

            var handlers = finder.FindEventHandlers(eventDeclaration).ToList();

            //We do not want to report all parameters of not handled events.
            return(handlers.Any() &&
                   handlers.All(handler => ParameterAtIndexIsNotUsed(handler, parameterIndex)));
        }
        protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
        {
            if (!(declaration is ParameterDeclaration parameter) ||
                !parameter.IsImplicitByRef ||
                parameter.IsParamArray)
            {
                return(false);
            }

            var parentDeclaration = parameter.ParentDeclaration;

            if (parentDeclaration is ModuleBodyElementDeclaration enclosingMethod)
            {
                return(!enclosingMethod.IsInterfaceImplementation &&
                       !finder.FindEventHandlers().Contains(enclosingMethod));
            }

            return(parentDeclaration.DeclarationType != DeclarationType.LibraryFunction &&
                   parentDeclaration.DeclarationType != DeclarationType.LibraryProcedure);
        }
        protected override (bool isResult, Declaration properties) IsResultDeclarationWithAdditionalProperties(
            Declaration userDeclaration,
            DeclarationFinder finder,
            IDictionary <string, HashSet <string> > referencedProjectIdsByProjectId)
        {
            // The user has no control over build-in event handlers or their parameters, so we skip them.
            //TODO: Find a way to restrict this to event handlers for built-in events. (Revisit after #5379 is closed.)
            var eventHandlers = finder.FindEventHandlers();

            if (DeclarationIsPartOfEventHandler(userDeclaration, eventHandlers))
            {
                return(false, null);
            }

            if (!referencedProjectIdsByProjectId.TryGetValue(userDeclaration.ProjectId, out var referencedProjectIds))
            {
                referencedProjectIds = new HashSet <string>();
            }

            var shadowedDeclaration = ShadowedDeclaration(userDeclaration, referencedProjectIds, finder);

            return(shadowedDeclaration != null, shadowedDeclaration);
        }
        protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
        {
            if (declaration.References.Any() ||
                !(declaration is ParameterDeclaration parameter))
            {
                return(false);
            }

            var enclosingMember = parameter.ParentDeclaration;

            if (IsLibraryMethod(enclosingMember))
            {
                return(false);
            }

            if (enclosingMember is EventDeclaration eventDeclaration)
            {
                return(ThereAreHandlersAndNoneUsesTheParameter(parameter, eventDeclaration, finder));
            }

            if (enclosingMember is ModuleBodyElementDeclaration member)
            {
                if (member.IsInterfaceMember)
                {
                    return(ThereAreImplementationsAndNoneUsesTheParameter(parameter, member, finder));
                }

                if (member.IsInterfaceImplementation ||
                    finder.FindEventHandlers().Contains(member))
                {
                    return(false);
                }
            }

            return(true);
        }
Exemple #13
0
 private static bool IsEventHandler(Declaration declaration, DeclarationFinder finder)
 {
     return(finder.FindEventHandlers().Contains(declaration) ||
            finder.FindFormEventHandlers().Contains(declaration));
 }