From 9c7467c6537bb7aa6068217aa8b95602a26a5f50 Mon Sep 17 00:00:00 2001 From: Saket Sinha Date: Sat, 25 May 2024 21:46:14 +0530 Subject: [PATCH] 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();