示例#1
0
 /// <summary>
 ///   Reports a diagnostic without source location.
 /// </summary>
 /// <param name="diags">
 ///   The diagnostic engine to use.
 /// </param>
 /// <param name="severity">
 ///   The severity of the diagnostic.
 /// </param>
 /// <param name="message">
 ///   The diagnostic message.
 /// </param>
 /// <param name="args">
 ///   Optional arguments used to format the <paramref name="message"/>.
 /// </param>
 public static void Report(
     this IDiagnostics diags, DiagnosticSeverity severity, string message, params object[] args)
 {
     diags.Report(severity, new SourceLocation(), message, args);
 }
示例#2
0
 /// <summary>
 ///   Reports an error.
 /// </summary>
 /// <param name="diags">
 ///   The diagnostic engine to use.
 /// </param>
 /// <param name="location">
 ///   The source location where the diagnostic occurred.
 /// </param>
 /// <param name="message">
 ///   The diagnostic message.
 /// </param>
 /// <param name="args">
 ///   Optional arguments used to format the <paramref name="message"/>.
 /// </param>
 public static void ReportError(
     this IDiagnostics diags, SourceLocation location, string message, params object[] args)
 {
     diags.Report(DiagnosticSeverity.Error, location, message, args);
 }
示例#3
0
        public static void AssignMessageIds(
            IDiagnostics diags, EventManifest manifest,
            Func <IMessageIdGenerator> generatorFactory)
        {
            foreach (var provider in manifest.Providers)
            {
                var msgIdGen = generatorFactory();
                if (NeedsId(provider.Message))
                {
                    provider.Message.Id = msgIdGen.CreateId(provider);
                }

                foreach (var obj in provider.Channels.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var obj in provider.Levels.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var obj in provider.Tasks.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var obj in provider.GetAllOpcodes().Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var obj in provider.Keywords.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var obj in provider.Events.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
                foreach (var map in provider.Maps)
                {
                    foreach (var item in map.Items.Where(e => NeedsId(e.Message)))
                    {
                        item.Message.Id = msgIdGen.CreateId(item, map, provider);
                    }
                }
                foreach (var obj in provider.Filters.Where(e => NeedsId(e.Message)))
                {
                    obj.Message.Id = msgIdGen.CreateId(obj, provider);
                }
            }

            var primaryResourceSet = manifest.PrimaryResourceSet;

            if (primaryResourceSet == null)
            {
                return;
            }

            foreach (var @string in primaryResourceSet.Strings.Used())
            {
                foreach (var resourceSet in manifest.Resources)
                {
                    if (resourceSet == manifest.PrimaryResourceSet)
                    {
                        continue;
                    }

                    if (!resourceSet.ContainsName(@string.Name))
                    {
                        diags.Report(
                            DiagnosticSeverity.Warning,
                            resourceSet.Location,
                            "String table for culture '{0}' is missing string '{1}'.",
                            resourceSet.Culture.Name,
                            @string.Name);
                    }
                }
            }
        }