internal ResultVersionOne CreateResultVersionOne(Result v2Result)
        {
            ResultVersionOne result = null;

            if (v2Result != null)
            {
                result = new ResultVersionOne
                {
                    BaselineState     = Utilities.CreateBaselineStateVersionOne(v2Result.BaselineState),
                    Fixes             = v2Result.Fixes?.Select(CreateFixVersionOne).ToList(),
                    Id                = v2Result.InstanceGuid,
                    Level             = Utilities.CreateResultLevelVersionOne(v2Result.Level, v2Result.Kind),
                    Locations         = v2Result.Locations?.Select(CreateLocationVersionOne).ToList(),
                    Message           = v2Result.Message?.Text,
                    Properties        = v2Result.Properties,
                    RelatedLocations  = v2Result.RelatedLocations?.Select(CreateAnnotatedCodeLocationVersionOne).ToList(),
                    Snippet           = v2Result.Locations?[0]?.PhysicalLocation?.Region?.Snippet?.Text,
                    Stacks            = v2Result.Stacks?.Select(CreateStackVersionOne).ToList(),
                    SuppressionStates = Utilities.CreateSuppressionStatesVersionOne(v2Result.SuppressionStates)
                };

                if (result.Fixes != null)
                {
                    // Null Fixes will be present in the case of unsupported encoding
                    (result.Fixes as List <FixVersionOne>).RemoveAll(f => f == null);

                    if (result.Fixes.Count == 0)
                    {
                        result.Fixes = null;
                    }
                }

                if (v2Result.AnalysisTarget != null)
                {
                    foreach (LocationVersionOne location in result.Locations)
                    {
                        location.AnalysisTarget = CreatePhysicalLocationVersionOne(v2Result.AnalysisTarget);
                    }
                }

                result.RuleId = v2Result.RuleId;
                string ruleKey = GetV1RuleKeyFromV2Index(v2Result.RuleIndex, _v2RuleIndexToV1KeyMap);

                // If the rules dictionary key is the same as the rule id, don't set result.RuleKey;
                // leave it null. This way, we don't unnecessarily persist ruleKey in the v1 SARIF file.
                // That is, we persist
                //
                //   "ruleId": "TST0001"
                //
                // instead of
                //
                //   "ruleId": "TST0001",
                //   "ruleKey": "TST0001"
                //
                if (ruleKey != result.RuleId)
                {
                    result.RuleKey = ruleKey;
                }

                if (!string.IsNullOrWhiteSpace(v2Result.Message?.MessageId))
                {
                    result.FormattedRuleMessage = new FormattedRuleMessageVersionOne
                    {
                        Arguments = v2Result.Message?.Arguments,
                        FormatId  = v2Result.Message.MessageId
                    };
                }
            }

            return(result);
        }
Example #2
0
        internal ResultVersionOne CreateResult(Result v2Result)
        {
            ResultVersionOne result = null;

            if (v2Result != null)
            {
                result = new ResultVersionOne
                {
                    BaselineState     = Utilities.CreateBaselineStateVersionOne(v2Result.BaselineState),
                    Fixes             = v2Result.Fixes?.Select(CreateFix).ToList(),
                    Id                = v2Result.InstanceGuid,
                    Level             = Utilities.CreateResultLevelVersionOne(v2Result.Level),
                    Locations         = v2Result.Locations?.Select(CreateLocation).ToList(),
                    Message           = v2Result.Message?.Text,
                    Properties        = v2Result.Properties,
                    RelatedLocations  = v2Result.RelatedLocations?.Select(CreateAnnotatedCodeLocation).ToList(),
                    Snippet           = v2Result.Locations?[0]?.PhysicalLocation?.Region?.Snippet?.Text,
                    Stacks            = v2Result.Stacks?.Select(CreateStack).ToList(),
                    SuppressionStates = Utilities.CreateSuppressionStatesVersionOne(v2Result.SuppressionStates)
                };

                if (result.Fixes != null)
                {
                    // Null Fixes will be present in the case of unsupported encoding
                    (result.Fixes as List <FixVersionOne>).RemoveAll(f => f == null);

                    if (result.Fixes.Count == 0)
                    {
                        result.Fixes = null;
                    }
                }

                if (v2Result.AnalysisTarget != null)
                {
                    foreach (LocationVersionOne location in result.Locations)
                    {
                        location.AnalysisTarget = CreatePhysicalLocation(v2Result.AnalysisTarget);
                    }
                }

                if (_currentV2Run.Resources?.Rules != null)
                {
                    IDictionary <string, Rule> rules = _currentV2Run.Resources.Rules;
                    Rule v2Rule;

                    if (v2Result.RuleId != null &&
                        rules.TryGetValue(v2Result.RuleId, out v2Rule) &&
                        v2Rule.Id != v2Result.RuleId)
                    {
                        result.RuleId  = v2Rule.Id;
                        result.RuleKey = v2Result.RuleId;
                    }
                    else
                    {
                        result.RuleId = v2Result.RuleId;
                    }
                }
                else
                {
                    result.RuleId = v2Result.RuleId;
                }

                if (!string.IsNullOrWhiteSpace(v2Result.Message?.MessageId))
                {
                    result.FormattedRuleMessage = new FormattedRuleMessageVersionOne
                    {
                        Arguments = v2Result.Message?.Arguments,
                        FormatId  = v2Result.Message.MessageId
                    };
                }
            }

            return(result);
        }