Beispiel #1
0
        public void LogMessage(MessageContainer message)
        {
            if (message == MessageContainer.Empty)
            {
                return;
            }

            if ((message.Category == MessageCategory.Diagnostic ||
                 message.Category == MessageCategory.Info) && !LogMessages)
            {
                return;
            }

            if (WarningSuppressionWriter != null &&
                (message.Category == MessageCategory.Warning || message.Category == MessageCategory.WarningAsError) &&
                message.Origin?.MemberDefinition != null)
            {
                WarningSuppressionWriter.AddWarning(message.Code.Value, message.Origin?.MemberDefinition);
            }

            if (message.Category == MessageCategory.Error || message.Category == MessageCategory.WarningAsError)
            {
                ErrorsCount++;
            }

            _logger.LogMessage(message);
        }
Beispiel #2
0
        public void LogMessage(MessageContainer message)
        {
            if (!LogMessages || message == MessageContainer.Empty)
            {
                return;
            }

            if (message.Category == MessageCategory.Warning &&
                NoWarn.Contains((uint)message.Code))
            {
                // This warning was turned off by --nowarn.
                return;
            }

            // Note: message.Version is nullable. The comparison is false if it is null.
            // Unversioned warnings are not controlled by WarnVersion.
            // Error messages are guaranteed to only have a version if they were created for a warning due to warnaserror.
            if ((message.Category == MessageCategory.Warning || message.Category == MessageCategory.Error) &&
                message.Version > WarnVersion)
            {
                // This warning was turned off by --warn.
                return;
            }

            if (OutputWarningSuppressions && message.Category == MessageCategory.Warning && message.Origin?.MemberDefinition != null)
            {
                WarningSuppressionWriter.AddWarning(message.Code.Value, message.Origin?.MemberDefinition);
            }

            Logger?.LogMessage(message);
        }
Beispiel #3
0
        public LinkContext(Pipeline pipeline, AssemblyResolver resolver, ReaderParameters readerParameters, UnintializedContextFactory factory)
        {
            _pipeline         = pipeline;
            _resolver         = resolver;
            _resolver.Context = this;
            _actions          = new Dictionary <string, AssemblyAction> ();
            _parameters       = new Dictionary <string, string> (StringComparer.Ordinal);
            _readerParameters = readerParameters;
            _customAttributes = new CustomAttributeSource();

            SymbolReaderProvider = new DefaultSymbolReaderProvider(false);

            if (factory == null)
            {
                throw new ArgumentNullException(nameof(factory));
            }

            _annotations              = factory.CreateAnnotationStore(this);
            MarkingHelpers            = factory.CreateMarkingHelpers(this);
            Tracer                    = factory.CreateTracer(this);
            ReflectionPatternRecorder = new LoggingReflectionPatternRecorder(this);
            MarkedKnownMembers        = new KnownMembers();
            StripDescriptors          = true;
            StripSubstitutions        = true;
            StripLinkAttributes       = true;
            PInvokes                  = new List <PInvokeInfo> ();
            Suppressions              = new UnconditionalSuppressMessageAttributeState(this);
            WarningSuppressionWriter  = new WarningSuppressionWriter(this);
            NoWarn                    = new HashSet <uint> ();
            GeneralWarnAsError        = false;
            WarnAsError               = new Dictionary <uint, bool> ();
            WarnVersion               = WarnVersion.Latest;

            // See https://github.com/mono/linker/issues/612
            const CodeOptimizations defaultOptimizations =
                CodeOptimizations.BeforeFieldInit |
                CodeOptimizations.OverrideRemoval |
                CodeOptimizations.UnusedInterfaces |
                CodeOptimizations.IPConstantPropagation;

            Optimizations = new CodeOptimizationsSettings(defaultOptimizations);
        }
Beispiel #4
0
 public void SetWarningSuppressionWriter(WarningSuppressionWriter.FileOutputKind fileOutputKind)
 {
     WarningSuppressionWriter = new WarningSuppressionWriter(this, fileOutputKind);
 }