Пример #1
0
#pragma warning restore IDE0044 // Add readonly modifier

        #endregion

        #region Init and process Methods

        /// <summary>
        /// Init all class wide settings.
        /// </summary>
        /// <param name="dbContext">DawaReplicationDBContext instance.</param>
        /// <param name="tableList">A list of tables to process.</param>
        /// <param name="dawaApiUri">Typical 'https://dawa.aws.dk/' .</param>
        /// <param name="readTimeoutInSeconds">DAWA api timeout in seconds. Normally 300 seconds.</param>
        /// <param name="udtraekRowsMax">Max number of rows to read. When 0 all rows are read.</param>
        public static void InitSettings(DawaReplicationDBContext dbContext, List <string> tableList, string dawaApiUri, int readTimeoutInSeconds, int udtraekRowsMax, int udtraekBulkSize, int dkStedDataStartPos, int dkStedBulkSize, int dbCommandTimeoutInSeconds, string tempDataFolderPath, bool activeFixes, string activeFixesListFileLocation, bool useMSApplicationInsights, bool jsonSerializerIgnoreNullValue)
        {
            if (tableList == null)
            {
                throw new ArgumentNullException(nameof(tableList));
            }

            if (tableList == null && tableList.Count == 0)
            {
                throw new ArgumentNullException(nameof(tableList));
            }

            if (string.IsNullOrEmpty(dawaApiUri))
            {
                throw new ArgumentNullException(nameof(dawaApiUri));
            }

            if (readTimeoutInSeconds == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(readTimeoutInSeconds));
            }

            if (udtraekBulkSize == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(udtraekBulkSize));
            }

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

            DBContext            = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
            TableList            = tableList;
            DawaApiUri           = dawaApiUri.EndsWith("/") ? dawaApiUri : dawaApiUri + "/";
            ReadTimeoutInSeconds = readTimeoutInSeconds;
            UdtraekRowsMax       = udtraekRowsMax;
            UdtraekBulkSize      = udtraekBulkSize;
            DKStedDataStartPos   = dkStedDataStartPos;
            DKStedBulkSize       = dkStedBulkSize;
            dbContext.Database.SetCommandTimeout(dbCommandTimeoutInSeconds);
            TempDataFolderPath            = tempDataFolderPath.EndsWith(@"\") ? tempDataFolderPath : tempDataFolderPath + @"\";
            ActiveFixes                   = activeFixes;
            ActiveFixesListFileLocation   = activeFixesListFileLocation;
            UseMSApplicationInsights      = useMSApplicationInsights;
            UserJsonSerializerSettings    = new JsonSerializerSettings {
            };
            JsonSerializerIgnoreNullValue = jsonSerializerIgnoreNullValue;
            if (jsonSerializerIgnoreNullValue)
            {
                UserJsonSerializerSettings = new JsonSerializerSettings {
                    NullValueHandling = NullValueHandling.Ignore
                };
            }

            if (ActiveFixes)
            {
                fixInfoList = FixInfo.FixInfoList(ActiveFixesListFileLocation);
            }
        }
Пример #2
0
        private static bool TryGetFixInfo(
            Diagnostic diagnostic,
            SyntaxNode root,
            SemanticModel model,
            ImmutableArray <TextDocument> additionalDocuments,
            CancellationToken cancellationToken,
            [NotNullWhen(returnValue: true)] out FixInfo?fixInfo)
        {
            fixInfo = null;

            if (!TryGetFixValue(diagnostic, out var fixValue))
            {
                return(false);
            }

            if (diagnostic.AdditionalLocations.Count == 1)
            {
                var locationToFix = diagnostic.AdditionalLocations[0];
                if (locationToFix.IsInSource &&
                    root.FindNode(locationToFix.SourceSpan, getInnermostNodeForTie: true) is { } fixNode&&
                    model.GetOperation(fixNode, cancellationToken) is ILiteralOperation literal &&
                    literal.ConstantValue.HasValue &&
                    literal.ConstantValue.Value is string)
                {
                    fixInfo = new FixInfo(fixValue, literal);
                    return(true);
                }

                return(false);
            }

            return(TryGetAdditionalDocumentFixInfo(diagnostic, fixValue, additionalDocuments, out fixInfo));
        }
Пример #3
0
 private bool RunFix(FixInfo fi)
 {
     if (fi != null)
     {
         try
         {
             return(fi.meth(fi.methParam));
         }
         catch (Exception ex)
         {
             MessageBox.Show(this, ex.Message, null, MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
     return(false);
 }
Пример #4
0
        private static bool TryGetAdditionalDocumentFixInfo(
            Diagnostic diagnostic,
            string fixValue,
            ImmutableArray <TextDocument> additionalDocuments,
            [NotNullWhen(returnValue: true)] out FixInfo?fixInfo)
        {
            if (DiagnosticDescriptorCreationAnalyzer.TryGetAdditionalDocumentLocationInfo(diagnostic, out var path, out var fixSpan) &&
                additionalDocuments.FirstOrDefault(a => string.Equals(a.FilePath, path, StringComparison.Ordinal)) is { } additionalDocument)
            {
                fixInfo = new FixInfo(fixValue, additionalDocument, fixSpan.Value);
                return(true);
            }

            fixInfo = null;
            return(false);
        }
Пример #5
0
        private static async Task <Solution> ApplyFixAsync(Document document, SyntaxNode root, FixInfo fixInfo, CancellationToken cancellationToken)
        {
            if (fixInfo.SourceLiteralAtLocationToFix is { } literal)
            {
                RoslynDebug.Assert(literal.ConstantValue.HasValue && literal.ConstantValue.Value is string);

                var generator  = SyntaxGenerator.GetGenerator(document);
                var newLiteral = generator.LiteralExpression(fixInfo.FixValue).WithTriviaFrom(literal.Syntax);
                var newRoot    = root.ReplaceNode(literal.Syntax, newLiteral);
                return(document.WithSyntaxRoot(newRoot).Project.Solution);
            }