From 5feacf9a194c594ded468a19293304c695783542 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Wed, 7 Nov 2018 10:48:04 +0200 Subject: [PATCH] fix(jsii): do not mark "any" or "unknown" as optional (unless "?") We accidentally marked every "any" and "unknown" types as optional, regardless if the declaration had a question mark or not. Fixes #284 --- packages/jsii-calc-base/test/assembly.jsii | 3 +- packages/jsii-calc/lib/compliance.ts | 9 ++++ packages/jsii-calc/test/assembly.jsii | 62 ++++++++++++++++------ packages/jsii/lib/assembler.ts | 4 +- 4 files changed, 59 insertions(+), 19 deletions(-) diff --git a/packages/jsii-calc-base/test/assembly.jsii b/packages/jsii-calc-base/test/assembly.jsii index d9b4a575a4..c8e66971d3 100644 --- a/packages/jsii-calc-base/test/assembly.jsii +++ b/packages/jsii-calc-base/test/assembly.jsii @@ -73,7 +73,6 @@ }, "name": "typeName", "returns": { - "optional": true, "primitive": "any" } } @@ -103,5 +102,5 @@ } }, "version": "0.7.8", - "fingerprint": "K1rAUs6WiQ5lF08T46B8v/5UL8T8Ot59e0Nc8rh2jiQ=" + "fingerprint": "FbKHAP60R40tOOnvhCeDrZDrNlgzIypOfAdWPed+Jog=" } diff --git a/packages/jsii-calc/lib/compliance.ts b/packages/jsii-calc/lib/compliance.ts index 783a5a94cf..a0989493cc 100644 --- a/packages/jsii-calc/lib/compliance.ts +++ b/packages/jsii-calc/lib/compliance.ts @@ -939,3 +939,12 @@ export interface IInterfaceWithMethods { export interface IInterfaceThatShouldNotBeADataType extends IInterfaceWithMethods { readonly otherValue: string; } + +/** + * jsii#284: do not recognize "any" as an optional argument + */ +export class DoNotRecognizeAnyAsOptional { + public method(_requiredAny: any, _optionalAny?: any, _optionalString?: string) { + + } +} diff --git a/packages/jsii-calc/test/assembly.jsii b/packages/jsii-calc/test/assembly.jsii index 97e7a8e8a5..d245fa15e5 100644 --- a/packages/jsii-calc/test/assembly.jsii +++ b/packages/jsii-calc/test/assembly.jsii @@ -382,7 +382,6 @@ "type": { "collection": { "elementtype": { - "optional": true, "primitive": "any" }, "kind": "array" @@ -394,13 +393,18 @@ "type": { "collection": { "elementtype": { - "optional": true, "primitive": "any" }, "kind": "map" } } }, + { + "name": "anyProperty", + "type": { + "primitive": "any" + } + }, { "name": "arrayProperty", "type": { @@ -528,7 +532,6 @@ "type": { "collection": { "elementtype": { - "optional": true, "primitive": "any" }, "kind": "array" @@ -540,7 +543,6 @@ "type": { "collection": { "elementtype": { - "optional": true, "primitive": "any" }, "kind": "map" @@ -548,9 +550,8 @@ } }, { - "name": "anyProperty", + "name": "unknownProperty", "type": { - "optional": true, "primitive": "any" } }, @@ -560,13 +561,6 @@ "fqn": "jsii-calc.StringEnum", "optional": true } - }, - { - "name": "unknownProperty", - "type": { - "optional": true, - "primitive": "any" - } } ] }, @@ -1301,6 +1295,45 @@ ], "name": "DoNotOverridePrivates" }, + "jsii-calc.DoNotRecognizeAnyAsOptional": { + "assembly": "jsii-calc", + "docs": { + "comment": "jsii#284: do not recognize \"any\" as an optional argument" + }, + "fqn": "jsii-calc.DoNotRecognizeAnyAsOptional", + "initializer": { + "initializer": true + }, + "kind": "class", + "methods": [ + { + "name": "method", + "parameters": [ + { + "name": "_requiredAny", + "type": { + "primitive": "any" + } + }, + { + "name": "_optionalAny", + "type": { + "optional": true, + "primitive": "any" + } + }, + { + "name": "_optionalString", + "type": { + "optional": true, + "primitive": "string" + } + } + ] + } + ], + "name": "DoNotRecognizeAnyAsOptional" + }, "jsii-calc.DoubleTrouble": { "assembly": "jsii-calc", "fqn": "jsii-calc.DoubleTrouble", @@ -3062,7 +3095,6 @@ { "name": "value", "returns": { - "optional": true, "primitive": "any" } } @@ -3412,5 +3444,5 @@ } }, "version": "0.7.8", - "fingerprint": "Xn7Rk17rqR3AaMx3+ssxT0GR1sCWwz0OGC+C8QuLI3A=" + "fingerprint": "2BaszImarh4WChl9DFUcygfTpEfXU17fHQT2wgEptfM=" } diff --git a/packages/jsii/lib/assembler.ts b/packages/jsii/lib/assembler.ts index d9847e6792..30d422d079 100644 --- a/packages/jsii/lib/assembler.ts +++ b/packages/jsii/lib/assembler.ts @@ -812,7 +812,7 @@ export class Assembler implements Emitter { this._diagnostic(declaration, ts.DiagnosticCategory.Error, `Only string index maps are supported`); - elementtype = { primitive: spec.PrimitiveType.Any, optional: true }; + elementtype = { primitive: spec.PrimitiveType.Any }; } return { collection: { @@ -830,7 +830,7 @@ export class Assembler implements Emitter { } // tslint:disable-next-line:no-bitwise if (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) { - return { primitive: spec.PrimitiveType.Any, optional: true }; + return { primitive: spec.PrimitiveType.Any }; } } else if (type.symbol.valueDeclaration && isUnder(type.symbol.valueDeclaration.getSourceFile().fileName, this.stdlib)) { switch (type.symbol.name) {