From 5bb735d38f18b492ece0a0d4e1aeb3151337fb0d Mon Sep 17 00:00:00 2001 From: Saket Sinha Date: Sat, 25 May 2024 21:46:14 +0530 Subject: [PATCH 1/2] added dependecy usings based on types present in renderContext --- .../src/language/CSharp/CSharpRenderer.ts | 19 ++++++++++++++++++- .../CSharp/NewtonSoftCSharpRenderer.ts | 6 ++++-- .../CSharp/SystemTextJsonCSharpRenderer.ts | 6 ++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index 09cfcc3ca..7f3afbf90 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -10,7 +10,7 @@ import { assert } from "../../support/Support"; import { type TargetLanguage } from "../../TargetLanguage"; import { followTargetType } from "../../Transformers"; import { type ClassProperty, type ClassType, type EnumType, type Type, type UnionType } from "../../Type"; -import { directlyReachableSingleNamedType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; +import { directlyReachableSingleNamedType, matchCompoundType, matchType, nullableFromUnion, removeNullFromUnion } from "../../TypeUtils"; import { type cSharpOptions } from "./language"; import { @@ -387,4 +387,21 @@ export class CSharpRenderer extends ConvenienceRenderer { this.emitDefaultFollowingComments(); } + + protected emitDependencyUsings(): void { + let nameSpaceForTypes: string[] = []; + this.typeGraph.allTypesUnordered().forEach(_ => { + matchCompoundType( + _, + _arrayType => this._csOptions.useList ? nameSpaceForTypes.push("System.Collections.Generic") : undefined, + _classType => { }, + _mapType => nameSpaceForTypes.push("System.Collections.Generic"), + _objectType => { }, + _unionType => { } + ) + }); + nameSpaceForTypes = nameSpaceForTypes.filter((val, ind) => nameSpaceForTypes.indexOf(val) === ind ); + nameSpaceForTypes.forEach(this.emitUsing.bind(this)); + } + } diff --git a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts index 4d6b09da6..b4533f031 100644 --- a/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/NewtonSoftCSharpRenderer.ts @@ -120,8 +120,10 @@ export class NewtonsoftCSharpRenderer extends CSharpRenderer { } protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; + if (!this._needAttributes && !this._needHelpers) { + this.emitDependencyUsings(); + return; + } super.emitUsings(); this.ensureBlankLine(); diff --git a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts index 77afed6da..78a99de94 100644 --- a/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/SystemTextJsonCSharpRenderer.ts @@ -120,8 +120,10 @@ export class SystemTextJsonCSharpRenderer extends CSharpRenderer { } protected emitUsings(): void { - // FIXME: We need System.Collections.Generic whenever we have maps or use List. - if (!this._needAttributes && !this._needHelpers) return; + if (!this._needAttributes && !this._needHelpers) { + this.emitDependencyUsings(); + return; + } super.emitUsings(); this.ensureBlankLine(); From 8169c75279b4e029be20899abf4a3fbd37853398 Mon Sep 17 00:00:00 2001 From: Saket Sinha Date: Sat, 8 Jun 2024 14:57:53 +0530 Subject: [PATCH 2/2] PR change : removed array usage for emiting , added local function to ensure single addition of "System.Collections.Generic" --- .../src/language/CSharp/CSharpRenderer.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts index 7f3afbf90..50a021afe 100644 --- a/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts +++ b/packages/quicktype-core/src/language/CSharp/CSharpRenderer.ts @@ -389,19 +389,23 @@ export class CSharpRenderer extends ConvenienceRenderer { } protected emitDependencyUsings(): void { - let nameSpaceForTypes: string[] = []; + let genericEmited: boolean = false; + let ensureGenericOnce = () => { + if (!genericEmited) { + this.emitUsing("System.Collections.Generic"); + genericEmited = true; + } + } this.typeGraph.allTypesUnordered().forEach(_ => { matchCompoundType( _, - _arrayType => this._csOptions.useList ? nameSpaceForTypes.push("System.Collections.Generic") : undefined, + _arrayType => this._csOptions.useList ? ensureGenericOnce() : undefined, _classType => { }, - _mapType => nameSpaceForTypes.push("System.Collections.Generic"), + _mapType => ensureGenericOnce(), _objectType => { }, _unionType => { } ) }); - nameSpaceForTypes = nameSpaceForTypes.filter((val, ind) => nameSpaceForTypes.indexOf(val) === ind ); - nameSpaceForTypes.forEach(this.emitUsing.bind(this)); } }