#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); } }
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)); }
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); }
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); }
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); }