public override bool Execute()
        {
            // Find ignored fields
            var ignoredFields = IgnoredFields.GetIgnoredFields(annotationRepositoryService, compilerAdapterService);

            // Sort types by inheritance hierarchy
            var toEnhance = this.GetTypesToEnhance();

            HashCodeInjection hashCodeInjection = new HashCodeInjection(this.Project);
            EqualsInjection   equalsInjection   = new EqualsInjection(this.Project);
            OperatorInjection operatorInjection = new OperatorInjection(this.Project);

            foreach (EqualsType enhancedTypeData in toEnhance)
            {
                var enhancedType = enhancedTypeData.EnhancedType;
                var config       = enhancedTypeData.Config;
                try
                {
                    if (!config.DoNotAddEquals)
                    {
                        equalsInjection.AddEqualsTo(enhancedType, config, ignoredFields);
                    }

                    if (!config.DoNotAddEqualityOperators)
                    {
                        operatorInjection.ProcessEqualityOperators(enhancedType, config);
                    }

                    if (!config.DoNotAddGetHashCode)
                    {
                        hashCodeInjection.AddGetHashCodeTo(enhancedType, config, ignoredFields);
                    }
                }
                catch (InjectionException exception)
                {
                    Message.Write(enhancedType, SeverityType.Error, exception.ErrorCode, exception.Message);
                    return(false);
                }
            }

            return(true);
        }