diff --git a/packages/@jsii/go-runtime/go.mod b/packages/@jsii/go-runtime/go.mod index 9ca92e5f60..2af1ba9b2d 100644 --- a/packages/@jsii/go-runtime/go.mod +++ b/packages/@jsii/go-runtime/go.mod @@ -4,6 +4,7 @@ go 1.15 require ( github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc v0.0.0 + github.com/aws-cdk/jsii/jsii-calc/go/scopejsiicalclib v0.0.0 github.com/aws-cdk/jsii/jsii-experimental v0.0.0 ) diff --git a/packages/@jsii/go-runtime/jsii-calc-test/main_test.go b/packages/@jsii/go-runtime/jsii-calc-test/main_test.go index 52abc3e14e..cd9cdd4481 100644 --- a/packages/@jsii/go-runtime/jsii-calc-test/main_test.go +++ b/packages/@jsii/go-runtime/jsii-calc-test/main_test.go @@ -3,6 +3,8 @@ package main import ( "fmt" calc "github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc" + returnsParam "github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc/submodule/returnsparam" + param "github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc/submodule/param" calclib "github.com/aws-cdk/jsii/jsii-calc/go/scopejsiicalclib" "github.com/aws-cdk/jsii/jsii-experimental" "math" @@ -153,3 +155,13 @@ func TestAllTypes(t *testing.T) { } }) } + +func TestReturnsSpecialParam(t *testing.T) { + retSpecialParam := returnsParam.NewReturnsSpecialParameter() + val := retSpecialParam.ReturnsSpecialParam() + expected := reflect.TypeOf(¶m.SpecialParameter{}) + actual := reflect.TypeOf(val) + if actual != expected { + t.Errorf("Expected type: %s; Actual: %s", expected, actual) + } +} diff --git a/packages/@jsii/go-runtime/jsii-experimental/runtime.go b/packages/@jsii/go-runtime/jsii-experimental/runtime.go index 7448a201ca..cbd45b9933 100644 --- a/packages/@jsii/go-runtime/jsii-experimental/runtime.go +++ b/packages/@jsii/go-runtime/jsii-experimental/runtime.go @@ -8,6 +8,9 @@ import ( "regexp" ) +// Maps interface types to their concrete implementation structs. Used by +// `castAndSetToPtr` to instantiate a concrete type that implements the +// the interface as dictated by the type of the &returnsPtr value. type implementationMap = map[reflect.Type]reflect.Type // Load ensures a npm package is loaded in the jsii kernel. diff --git a/packages/jsii-pacmak/lib/targets/go/package.ts b/packages/jsii-pacmak/lib/targets/go/package.ts index e6f3c1e88b..7ae2127621 100644 --- a/packages/jsii-pacmak/lib/targets/go/package.ts +++ b/packages/jsii-pacmak/lib/targets/go/package.ts @@ -94,14 +94,6 @@ export abstract class Package { return findTypeInTree(this, fqn); } - public get importPath(): string { - const moduleName = this.root.moduleName; - const prefix = moduleName !== '' ? `${moduleName}/` : ''; - const rootPackageName = this.root.packageName; - const suffix = this.filePath !== '' ? `/${this.filePath}` : ''; - return `${prefix}${rootPackageName}${suffix}`; - } - public emit(context: EmitContext): void { const { code } = context; diff --git a/packages/jsii-pacmak/lib/targets/go/runtime/function-call.ts b/packages/jsii-pacmak/lib/targets/go/runtime/function-call.ts new file mode 100644 index 0000000000..a294c14548 --- /dev/null +++ b/packages/jsii-pacmak/lib/targets/go/runtime/function-call.ts @@ -0,0 +1,39 @@ +import {CodeMaker} from 'codemaker'; +import {JSII_IMPL_MAP_TYPE} from './constants'; +import {GoTypeMember} from "../types"; + +export abstract class FunctionCall { + public constructor(public readonly parent: GoTypeMember) {} + + protected get implMap(): string[] { + return this.parent.reference?.scopedImplMap(this.parent.parent.pkg) ?? []; + } + + /** + * Emits map of interface type to concrete struct type for use in runtime to + * cast data to expected return type. + */ + protected emitImplMapVal(code: CodeMaker) { + if (this.implMap.length) { + const [interfaceName, structName] = this.implMap; + code.open(`${JSII_IMPL_MAP_TYPE}{`); + + // `reflect.TypeOf((*SomeType)(nil)).Elem()` is a reliable way to create + // an instance of reflect.Type for any type. `(*SomeInterface)(nil)` + // creates a "zero value" with the type `SomeInterface` which otherwise + // has no way to instantiate. + code.line(`reflect.TypeOf((*${interfaceName})(nil)).Elem(): reflect.TypeOf((*${structName})(nil)).Elem(),`); + code.close('},'); + } else { + code.line(`${JSII_IMPL_MAP_TYPE}{},`); + } + } + + protected get returnsVal(): boolean { + return Boolean(this.parent.reference && !this.parent.reference.void); + } + + protected get returnType(): string { + return this.parent.returnType || 'interface{}'; + } +} diff --git a/packages/jsii-pacmak/lib/targets/go/runtime/method-call.ts b/packages/jsii-pacmak/lib/targets/go/runtime/method-call.ts index e2a9b5841a..f46f9a5e95 100644 --- a/packages/jsii-pacmak/lib/targets/go/runtime/method-call.ts +++ b/packages/jsii-pacmak/lib/targets/go/runtime/method-call.ts @@ -4,12 +4,15 @@ import { GoMethod } from '../types'; import { JSII_INVOKE_FUNC, JSII_SINVOKE_FUNC, - JSII_IMPL_MAP_TYPE, } from './constants'; import { slugify, emitInitialization } from './util'; +import { FunctionCall } from './function-call'; -export class MethodCall { - public constructor(public readonly parent: GoMethod) {} +export class MethodCall extends FunctionCall { + private _returnVarName = ''; + public constructor(public readonly parent: GoMethod) { + super(parent) + } public emit(code: CodeMaker) { if (this.inStatic) { @@ -20,20 +23,15 @@ export class MethodCall { } private emitDynamic(code: CodeMaker) { - code.line(`var ${this.returnVarName} ${this.concreteReturnType}`); - code.line(`${this.implMapVar} := make(${JSII_IMPL_MAP_TYPE})`); + code.line(`var ${this.returnVarName} ${this.returnType}`); code.open(`${JSII_INVOKE_FUNC}(`); - const returnsArg = this.parent.returnsRef - ? this.returnVarName - : `&${this.returnVarName}`; - code.line(`${this.parent.instanceArg},`); code.line(`"${this.parent.method.name}",`); code.line(`${this.argsString},`); code.line(`${this.returnsVal ? 'true' : 'false'},`); - code.line(`${returnsArg},`); - code.line(`${this.implMapVar},`); + code.line(`&${this.returnVarName},`); + this.emitImplMapVal(code); code.close(`)`); @@ -44,8 +42,7 @@ export class MethodCall { private emitStatic(code: CodeMaker) { emitInitialization(code); - code.line(`var ${this.returnVarName} ${this.concreteReturnType}`); - code.line(`${this.implMapVar} := make(${JSII_IMPL_MAP_TYPE})`); + code.line(`var ${this.returnVarName} ${this.returnType}`); code.open(`${JSII_SINVOKE_FUNC}(`); @@ -54,7 +51,7 @@ export class MethodCall { code.line(`${this.argsString},`); code.line(`${this.returnsVal ? 'true' : 'false'},`); code.line(`&${this.returnVarName},`); - code.line(`${this.implMapVar},`); + this.emitImplMapVal(code); code.close(`)`); @@ -64,29 +61,13 @@ export class MethodCall { } private get returnVarName(): string { - return slugify( - 'returns', - this.parent.parameters.map((p) => p.name), - ); - } - - private get implMapVar(): string { - return slugify( - 'implMap', - this.parent.parameters.map((p) => p.name), - ); - } - - private get returnsVal(): boolean { - return Boolean(this.parent.reference && !this.parent.reference.void); - } - - private get concreteReturnType(): string | undefined { - if (this.returnsVal) { - return this.parent.concreteReturnType; + if (this._returnVarName === '') { + this._returnVarName = slugify( + 'returns', + this.parent.parameters.map((p) => p.name), + ); } - - return 'interface{}'; + return this._returnVarName; } private get inStatic(): boolean { diff --git a/packages/jsii-pacmak/lib/targets/go/runtime/property-access.ts b/packages/jsii-pacmak/lib/targets/go/runtime/property-access.ts index bd759c65fe..298ec7a7ca 100644 --- a/packages/jsii-pacmak/lib/targets/go/runtime/property-access.ts +++ b/packages/jsii-pacmak/lib/targets/go/runtime/property-access.ts @@ -6,33 +6,24 @@ import { JSII_SET_FUNC, JSII_SGET_FUNC, JSII_SSET_FUNC, - JSII_IMPL_MAP_TYPE, } from './constants'; import { slugify, emitInitialization } from './util'; +import {FunctionCall} from './function-call'; -export class GetProperty { - public constructor(public readonly parent: GoProperty) {} +export class GetProperty extends FunctionCall { + public constructor(public readonly parent: GoProperty) { + super(parent); + } public emit(code: CodeMaker) { const resultVar = slugify('returns', [this.parent.instanceArg]); - const implMapVar = slugify('implMap', [this.parent.instanceArg]); - code.line(`var ${resultVar} ${this.parent.returnType}`); - code.line(`${implMapVar} := make(${JSII_IMPL_MAP_TYPE})`); - - const implMap = - this.parent.reference?.scopedImplMap(this.parent.parent.pkg) ?? []; - if (implMap.length) { - const [interfaceName, structName] = implMap; - code.line( - `${implMapVar}[reflect.TypeOf((*${interfaceName})(nil)).Elem()] = reflect.TypeOf((*${structName})(nil)).Elem()`, - ); - } + code.line(`var ${resultVar} ${this.returnType}`); code.open(`${JSII_GET_FUNC}(`); code.line(`${this.parent.instanceArg},`); code.line(`"${this.parent.property.name}",`); code.line(`&${resultVar},`); - code.line(`${implMapVar},`); + this.emitImplMapVal(code); code.close(`)`); code.line(`return ${resultVar}`); @@ -51,30 +42,21 @@ export class SetProperty { } } -export class StaticGetProperty { - public constructor(public readonly parent: GoProperty) {} +export class StaticGetProperty extends FunctionCall { + public constructor(public readonly parent: GoProperty) { + super(parent); + } public emit(code: CodeMaker) { emitInitialization(code); const resultVar = slugify('returns', []); - const implMapVar = slugify('implMap', [this.parent.instanceArg]); - code.line(`var ${resultVar} ${this.parent.returnType}`); - code.line(`${implMapVar} := make(${JSII_IMPL_MAP_TYPE})`); - - const implMap = - this.parent.reference?.scopedImplMap(this.parent.parent.pkg) ?? []; - if (implMap.length) { - const [interfaceName, structName] = implMap; - code.line( - `${implMapVar}[reflect.TypeOf((*${interfaceName})(nil)).Elem()] = reflect.TypeOf((*${structName})(nil)).Elem()`, - ); - } + code.line(`var ${resultVar} ${this.returnType}`); code.open(`${JSII_SGET_FUNC}(`); code.line(`"${this.parent.parent.fqn}",`); code.line(`"${this.parent.property.name}",`); code.line(`&${resultVar},`); - code.line(`${implMapVar},`); + this.emitImplMapVal(code); code.close(`)`); code.line(`return ${resultVar}`); diff --git a/packages/jsii-pacmak/lib/targets/go/types/class.ts b/packages/jsii-pacmak/lib/targets/go/types/class.ts index ee28925ea9..66acad6c21 100644 --- a/packages/jsii-pacmak/lib/targets/go/types/class.ts +++ b/packages/jsii-pacmak/lib/targets/go/types/class.ts @@ -84,11 +84,8 @@ export class GoClass extends GoStruct { ); } - public get usesReflectionPackage() { - return ( - this.properties.some((p) => p.usesReflectionPackage) || - this.methods.some((m) => m.usesReflectionPackage) - ); + public get usesReflectionPackage(): boolean { + return this.properties.length > 0 || this.methods.length > 0; } protected emitInterface(context: EmitContext): void { @@ -248,10 +245,6 @@ export class ClassMethod extends GoMethod { public get instanceArg(): string { return this.parent.name.substring(0, 1).toLowerCase(); } - - public get usesReflectionPackage() { - return Boolean(this.reference?.scopedImplMap(this.parent.pkg).length); - } } export class StaticMethod extends ClassMethod { diff --git a/packages/jsii-pacmak/lib/targets/go/types/go-type.ts b/packages/jsii-pacmak/lib/targets/go/types/go-type.ts index f7b3595243..f037eab811 100644 --- a/packages/jsii-pacmak/lib/targets/go/types/go-type.ts +++ b/packages/jsii-pacmak/lib/targets/go/types/go-type.ts @@ -70,6 +70,10 @@ export abstract class GoStruct extends GoType { return this.properties.some((p) => p.usesRuntimePackage); } + public get usesReflectionPackage(): boolean { + return this.properties.length > 0; + } + protected emitInterface(context: EmitContext): void { const { code } = context; code.line( diff --git a/packages/jsii-pacmak/lib/targets/go/types/interface.ts b/packages/jsii-pacmak/lib/targets/go/types/interface.ts index 087f403266..0d854876f1 100644 --- a/packages/jsii-pacmak/lib/targets/go/types/interface.ts +++ b/packages/jsii-pacmak/lib/targets/go/types/interface.ts @@ -88,11 +88,8 @@ export class Interface extends GoType { ); } - public get usesReflectionPackage() { - return ( - this.properties.some((p) => p.usesReflectionPackage) || - this.methods.some((m) => m.usesReflectionPackage) - ); + public get usesReflectionPackage(): boolean { + return this.properties.length > 0 || this.methods.length > 0; } public get extends(): GoTypeRef[] { @@ -190,8 +187,4 @@ class InterfaceMethod extends GoMethod { private get returnTypeString(): string { return this.reference?.void ? '' : ` ${this.returnType}`; } - - public get usesReflectionPackage() { - return Boolean(this.reference?.scopedImplMap(this.parent.pkg).length); - } } diff --git a/packages/jsii-pacmak/lib/targets/go/types/struct.ts b/packages/jsii-pacmak/lib/targets/go/types/struct.ts index 58eb290e73..7928ee6542 100644 --- a/packages/jsii-pacmak/lib/targets/go/types/struct.ts +++ b/packages/jsii-pacmak/lib/targets/go/types/struct.ts @@ -17,6 +17,6 @@ export class Struct extends GoStruct { } public get usesReflectionPackage() { - return this.properties.some((p) => p.usesReflectionPackage); + return this.properties.length > 0; } } diff --git a/packages/jsii-pacmak/lib/targets/go/types/type-member.ts b/packages/jsii-pacmak/lib/targets/go/types/type-member.ts index 91be212c59..853b939f5e 100644 --- a/packages/jsii-pacmak/lib/targets/go/types/type-member.ts +++ b/packages/jsii-pacmak/lib/targets/go/types/type-member.ts @@ -18,7 +18,6 @@ export interface GoTypeMember { usesInitPackage: boolean; usesRuntimePackage: boolean; - usesReflectionPackage: boolean; } /* @@ -52,10 +51,6 @@ export class GoProperty implements GoTypeMember { return true; } - public get usesReflectionPackage() { - return Boolean(this.reference?.scopedImplMap(this.parent.pkg).length); - } - public get static(): boolean { return !!this.property.static; } @@ -157,7 +152,6 @@ export abstract class GoMethod implements GoTypeMember { public abstract emit(context: EmitContext): void; public abstract get usesInitPackage(): boolean; public abstract get usesRuntimePackage(): boolean; - public abstract get usesReflectionPackage(): boolean; public get returnsRef(): boolean { if ( diff --git a/packages/jsii-pacmak/test/generated-code/__snapshots__/target-go.test.ts.snap b/packages/jsii-pacmak/test/generated-code/__snapshots__/target-go.test.ts.snap index 815601cb36..5eda908836 100644 --- a/packages/jsii-pacmak/test/generated-code/__snapshots__/target-go.test.ts.snap +++ b/packages/jsii-pacmak/test/generated-code/__snapshots__/target-go.test.ts.snap @@ -1038,6 +1038,7 @@ func NewReflector() ReflectorIface { func (r *Reflector) AsMap(reflectable IReflectableIface) map[string]interface{} { var returns map[string]interface{} implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*interface{})(nil)).Elem()] = reflect.TypeOf((*interface{})(nil)).Elem() _jsii_.Invoke( r, "asMap", @@ -1308,6 +1309,7 @@ package derivedclasshasnoproperties import ( _jsii_ "github.com/aws-cdk/jsii/jsii-experimental" _init_ "github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc/jsii" + "reflect" ) // Class interface @@ -1423,6 +1425,7 @@ package interfaceinnamespaceincludesclasses import ( _jsii_ "github.com/aws-cdk/jsii/jsii-experimental" _init_ "github.com/aws-cdk/jsii/jsii-calc/go/jsiicalc/jsii" + "reflect" ) // Class interface @@ -1501,6 +1504,7 @@ package interfaceinnamespaceonlyinterface import ( _jsii_ "github.com/aws-cdk/jsii/jsii-experimental" + "reflect" ) // HelloIface is the public interface for the custom type Hello @@ -1733,28 +1737,30 @@ func NewAbstractClassReturner() AbstractClassReturnerIface { } func (a *AbstractClassReturner) GiveMeAbstract() AbstractClassIface { - var returns *AbstractClass + var returns AbstractClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*AbstractClassIface)(nil)).Elem()] = reflect.TypeOf((*AbstractClass)(nil)).Elem() _jsii_.Invoke( a, "giveMeAbstract", []interface{}{}, true, - returns, + &returns, implMap, ) return returns } func (a *AbstractClassReturner) GiveMeInterface() IInterfaceImplementedByAbstractClassIface { - var returns *IInterfaceImplementedByAbstractClass + var returns IInterfaceImplementedByAbstractClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IInterfaceImplementedByAbstractClassIface)(nil)).Elem()] = reflect.TypeOf((*IInterfaceImplementedByAbstractClass)(nil)).Elem() _jsii_.Invoke( a, "giveMeInterface", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -2449,6 +2455,7 @@ func (a *AllTypes) AnyOut() interface{} { func (a *AllTypes) EnumMethod(value StringEnum) StringEnum { var returns StringEnum implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StringEnum)(nil)).Elem()] = reflect.TypeOf((*StringEnum)(nil)).Elem() _jsii_.Invoke( a, "enumMethod", @@ -2623,28 +2630,30 @@ func NewAnonymousImplementationProvider() AnonymousImplementationProviderIface { } func (a *AnonymousImplementationProvider) ProvideAsClass() ImplementationIface { - var returns *Implementation + var returns ImplementationIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ImplementationIface)(nil)).Elem()] = reflect.TypeOf((*Implementation)(nil)).Elem() _jsii_.Invoke( a, "provideAsClass", []interface{}{}, true, - returns, + &returns, implMap, ) return returns } func (a *AnonymousImplementationProvider) ProvideAsInterface() IAnonymouslyImplementMeIface { - var returns *IAnonymouslyImplementMe + var returns IAnonymouslyImplementMeIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IAnonymouslyImplementMeIface)(nil)).Elem()] = reflect.TypeOf((*IAnonymouslyImplementMe)(nil)).Elem() _jsii_.Invoke( a, "provideAsInterface", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -3796,6 +3805,7 @@ func ClassWithCollections_CreateAList() []string { _init_.Initialize() var returns []string implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*string)(nil)).Elem()] = reflect.TypeOf((*string)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ClassWithCollections", "createAList", @@ -3811,6 +3821,7 @@ func ClassWithCollections_CreateAMap() map[string]string { _init_.Initialize() var returns map[string]string implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*string)(nil)).Elem()] = reflect.TypeOf((*string)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ClassWithCollections", "createAMap", @@ -4044,8 +4055,9 @@ func (c *ClassWithPrivateConstructorAndAutomaticProperties) SetReadWriteString(v func ClassWithPrivateConstructorAndAutomaticProperties_Create(readOnlyString string, readWriteString string) ClassWithPrivateConstructorAndAutomaticPropertiesIface { _init_.Initialize() - var returns *ClassWithPrivateConstructorAndAutomaticProperties + var returns ClassWithPrivateConstructorAndAutomaticPropertiesIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ClassWithPrivateConstructorAndAutomaticPropertiesIface)(nil)).Elem()] = reflect.TypeOf((*ClassWithPrivateConstructorAndAutomaticProperties)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ClassWithPrivateConstructorAndAutomaticProperties", "create", @@ -4094,8 +4106,9 @@ func (c *ConfusingToJackson) SetUnionProperty(val interface{}) { func ConfusingToJackson_MakeInstance() ConfusingToJacksonIface { _init_.Initialize() - var returns *ConfusingToJackson + var returns ConfusingToJacksonIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ConfusingToJacksonIface)(nil)).Elem()] = reflect.TypeOf((*ConfusingToJackson)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ConfusingToJackson", "makeInstance", @@ -4109,8 +4122,9 @@ func ConfusingToJackson_MakeInstance() ConfusingToJacksonIface { func ConfusingToJackson_MakeStructInstance() ConfusingToJacksonStructIface { _init_.Initialize() - var returns *ConfusingToJacksonStruct + var returns ConfusingToJacksonStructIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ConfusingToJacksonStructIface)(nil)).Elem()] = reflect.TypeOf((*ConfusingToJacksonStruct)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ConfusingToJackson", "makeStructInstance", @@ -4189,8 +4203,9 @@ func NewConstructors() ConstructorsIface { func Constructors_HiddenInterface() IPublicInterfaceIface { _init_.Initialize() - var returns *IPublicInterface + var returns IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "hiddenInterface", @@ -4206,6 +4221,7 @@ func Constructors_HiddenInterfaces() []IPublicInterfaceIface { _init_.Initialize() var returns []IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "hiddenInterfaces", @@ -4221,6 +4237,7 @@ func Constructors_HiddenSubInterfaces() []IPublicInterfaceIface { _init_.Initialize() var returns []IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "hiddenSubInterfaces", @@ -4234,8 +4251,9 @@ func Constructors_HiddenSubInterfaces() []IPublicInterfaceIface { func Constructors_MakeClass() PublicClassIface { _init_.Initialize() - var returns *PublicClass + var returns PublicClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*PublicClassIface)(nil)).Elem()] = reflect.TypeOf((*PublicClass)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "makeClass", @@ -4249,8 +4267,9 @@ func Constructors_MakeClass() PublicClassIface { func Constructors_MakeInterface() IPublicInterfaceIface { _init_.Initialize() - var returns *IPublicInterface + var returns IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "makeInterface", @@ -4264,8 +4283,9 @@ func Constructors_MakeInterface() IPublicInterfaceIface { func Constructors_MakeInterface2() IPublicInterface2Iface { _init_.Initialize() - var returns *IPublicInterface2 + var returns IPublicInterface2Iface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterface2Iface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface2)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "makeInterface2", @@ -4281,6 +4301,7 @@ func Constructors_MakeInterfaces() []IPublicInterfaceIface { _init_.Initialize() var returns []IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Constructors", "makeInterfaces", @@ -4315,14 +4336,15 @@ func NewConsumePureInterface(delegate IStructReturningDelegateIface) ConsumePure } func (c *ConsumePureInterface) WorkItBaby() StructBIface { - var returns *StructB + var returns StructBIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StructBIface)(nil)).Elem()] = reflect.TypeOf((*StructB)(nil)).Elem() _jsii_.Invoke( c, "workItBaby", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -4682,8 +4704,9 @@ func NewDemonstrate982() Demonstrate982Iface { func Demonstrate982_TakeThis() ChildStruct982Iface { _init_.Initialize() - var returns *ChildStruct982 + var returns ChildStruct982Iface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ChildStruct982Iface)(nil)).Elem()] = reflect.TypeOf((*ChildStruct982)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Demonstrate982", "takeThis", @@ -4697,8 +4720,9 @@ func Demonstrate982_TakeThis() ChildStruct982Iface { func Demonstrate982_TakeThisToo() ParentStruct982Iface { _init_.Initialize() - var returns *ParentStruct982 + var returns ParentStruct982Iface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ParentStruct982Iface)(nil)).Elem()] = reflect.TypeOf((*ParentStruct982)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.Demonstrate982", "takeThisToo", @@ -5646,6 +5670,7 @@ func EnumDispenser_RandomIntegerLikeEnum() AllTypesEnum { _init_.Initialize() var returns AllTypesEnum implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*AllTypesEnum)(nil)).Elem()] = reflect.TypeOf((*AllTypesEnum)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.EnumDispenser", "randomIntegerLikeEnum", @@ -5661,6 +5686,7 @@ func EnumDispenser_RandomStringLikeEnum() StringEnum { _init_.Initialize() var returns StringEnum implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StringEnum)(nil)).Elem()] = reflect.TypeOf((*StringEnum)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.EnumDispenser", "randomStringLikeEnum", @@ -5712,6 +5738,7 @@ func EraseUndefinedHashValues_Prop1IsNull() map[string]interface{} { _init_.Initialize() var returns map[string]interface{} implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*interface{})(nil)).Elem()] = reflect.TypeOf((*interface{})(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.EraseUndefinedHashValues", "prop1IsNull", @@ -5727,6 +5754,7 @@ func EraseUndefinedHashValues_Prop2IsUndefined() map[string]interface{} { _init_.Initialize() var returns map[string]interface{} implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*interface{})(nil)).Elem()] = reflect.TypeOf((*interface{})(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.EraseUndefinedHashValues", "prop2IsUndefined", @@ -6102,28 +6130,30 @@ func NewGiveMeStructs() GiveMeStructsIface { } func (g *GiveMeStructs) DerivedToFirst(derived DerivedStructIface) scopejsiicalclib.MyFirstStructIface { - var returns *scopejsiicalclib.MyFirstStruct + var returns scopejsiicalclib.MyFirstStructIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalclib.MyFirstStructIface)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalclib.MyFirstStruct)(nil)).Elem() _jsii_.Invoke( g, "derivedToFirst", []interface{}{derived}, true, - returns, + &returns, implMap, ) return returns } func (g *GiveMeStructs) ReadDerivedNonPrimitive(derived DerivedStructIface) DoubleTroubleIface { - var returns *DoubleTrouble + var returns DoubleTroubleIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*DoubleTroubleIface)(nil)).Elem()] = reflect.TypeOf((*DoubleTrouble)(nil)).Elem() _jsii_.Invoke( g, "readDerivedNonPrimitive", []interface{}{derived}, true, - returns, + &returns, implMap, ) return returns @@ -6213,28 +6243,30 @@ type IAnonymousImplementationProviderIface interface { type IAnonymousImplementationProvider struct {} func (i *IAnonymousImplementationProvider) ProvideAsClass() ImplementationIface { - var returns *Implementation + var returns ImplementationIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*ImplementationIface)(nil)).Elem()] = reflect.TypeOf((*Implementation)(nil)).Elem() _jsii_.Invoke( i, "provideAsClass", []interface{}{}, true, - returns, + &returns, implMap, ) return returns } func (i *IAnonymousImplementationProvider) ProvideAsInterface() IAnonymouslyImplementMeIface { - var returns *IAnonymouslyImplementMe + var returns IAnonymouslyImplementMeIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IAnonymouslyImplementMeIface)(nil)).Elem()] = reflect.TypeOf((*IAnonymouslyImplementMe)(nil)).Elem() _jsii_.Invoke( i, "provideAsInterface", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -7232,14 +7264,15 @@ type IReturnsNumberIface interface { type IReturnsNumber struct {} func (i *IReturnsNumber) ObtainNumber() scopejsiicalclib.IDoublableIface { - var returns *scopejsiicalclib.IDoublable + var returns scopejsiicalclib.IDoublableIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalclib.IDoublableIface)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalclib.IDoublable)(nil)).Elem() _jsii_.Invoke( i, "obtainNumber", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -7306,14 +7339,15 @@ type IStructReturningDelegateIface interface { type IStructReturningDelegate struct {} func (i *IStructReturningDelegate) ReturnStruct() StructBIface { - var returns *StructB + var returns StructBIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StructBIface)(nil)).Elem()] = reflect.TypeOf((*StructB)(nil)).Elem() _jsii_.Invoke( i, "returnStruct", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -7657,6 +7691,7 @@ func InterfaceCollections_ListOfInterfaces() []IBellIface { _init_.Initialize() var returns []IBellIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IBellIface)(nil)).Elem()] = reflect.TypeOf((*IBell)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.InterfaceCollections", "listOfInterfaces", @@ -7672,6 +7707,7 @@ func InterfaceCollections_ListOfStructs() []StructAIface { _init_.Initialize() var returns []StructAIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StructAIface)(nil)).Elem()] = reflect.TypeOf((*StructA)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.InterfaceCollections", "listOfStructs", @@ -7687,6 +7723,7 @@ func InterfaceCollections_MapOfInterfaces() map[string]IBellIface { _init_.Initialize() var returns map[string]IBellIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IBellIface)(nil)).Elem()] = reflect.TypeOf((*IBell)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.InterfaceCollections", "mapOfInterfaces", @@ -7702,6 +7739,7 @@ func InterfaceCollections_MapOfStructs() map[string]StructAIface { _init_.Initialize() var returns map[string]StructAIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*StructAIface)(nil)).Elem()] = reflect.TypeOf((*StructA)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.InterfaceCollections", "mapOfStructs", @@ -7726,6 +7764,7 @@ func InterfacesMaker_MakeInterfaces(count float64) []scopejsiicalclib.IDoublable _init_.Initialize() var returns []scopejsiicalclib.IDoublableIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalclib.IDoublableIface)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalclib.IDoublable)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.InterfacesMaker", "makeInterfaces", @@ -7764,14 +7803,15 @@ func NewIsomorphism() IsomorphismIface { } func (i *Isomorphism) Myself() IsomorphismIface { - var returns *Isomorphism + var returns IsomorphismIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IsomorphismIface)(nil)).Elem()] = reflect.TypeOf((*Isomorphism)(nil)).Elem() _jsii_.Invoke( i, "myself", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -7832,8 +7872,9 @@ func NewJsii417Derived(property string) Jsii417DerivedIface { func Jsii417Derived_MakeInstance() Jsii417PublicBaseOfBaseIface { _init_.Initialize() - var returns *Jsii417PublicBaseOfBase + var returns Jsii417PublicBaseOfBaseIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*Jsii417PublicBaseOfBaseIface)(nil)).Elem()] = reflect.TypeOf((*Jsii417PublicBaseOfBase)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.JSII417Derived", "makeInstance", @@ -7923,8 +7964,9 @@ func NewJsii417PublicBaseOfBase() Jsii417PublicBaseOfBaseIface { func Jsii417PublicBaseOfBase_MakeInstance() Jsii417PublicBaseOfBaseIface { _init_.Initialize() - var returns *Jsii417PublicBaseOfBase + var returns Jsii417PublicBaseOfBaseIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*Jsii417PublicBaseOfBaseIface)(nil)).Elem()] = reflect.TypeOf((*Jsii417PublicBaseOfBase)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.JSII417PublicBaseOfBase", "makeInstance", @@ -7973,28 +8015,30 @@ func NewJsObjectLiteralForInterface() JsObjectLiteralForInterfaceIface { } func (j *JsObjectLiteralForInterface) GiveMeFriendly() scopejsiicalclib.IFriendlyIface { - var returns *scopejsiicalclib.IFriendly + var returns scopejsiicalclib.IFriendlyIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalclib.IFriendlyIface)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalclib.IFriendly)(nil)).Elem() _jsii_.Invoke( j, "giveMeFriendly", []interface{}{}, true, - returns, + &returns, implMap, ) return returns } func (j *JsObjectLiteralForInterface) GiveMeFriendlyGenerator() IFriendlyRandomGeneratorIface { - var returns *IFriendlyRandomGenerator + var returns IFriendlyRandomGeneratorIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IFriendlyRandomGeneratorIface)(nil)).Elem()] = reflect.TypeOf((*IFriendlyRandomGenerator)(nil)).Elem() _jsii_.Invoke( j, "giveMeFriendlyGenerator", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -8023,14 +8067,15 @@ func NewJsObjectLiteralToNative() JsObjectLiteralToNativeIface { } func (j *JsObjectLiteralToNative) ReturnLiteral() JsObjectLiteralToNativeClassIface { - var returns *JsObjectLiteralToNativeClass + var returns JsObjectLiteralToNativeClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*JsObjectLiteralToNativeClassIface)(nil)).Elem()] = reflect.TypeOf((*JsObjectLiteralToNativeClass)(nil)).Elem() _jsii_.Invoke( j, "returnLiteral", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -9754,8 +9799,9 @@ type NestedClassInstance struct { func NestedClassInstance_MakeInstance() submodule.NestedClassIface { _init_.Initialize() - var returns *submodule.NestedClass + var returns submodule.NestedClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*submodule.NestedClassIface)(nil)).Elem()] = reflect.TypeOf((*submodule.NestedClass)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.NestedClassInstance", "makeInstance", @@ -10139,8 +10185,9 @@ type ObjectWithPropertyProvider struct { func ObjectWithPropertyProvider_Provide() IObjectWithPropertyIface { _init_.Initialize() - var returns *IObjectWithProperty + var returns IObjectWithPropertyIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IObjectWithPropertyIface)(nil)).Elem()] = reflect.TypeOf((*IObjectWithProperty)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.ObjectWithPropertyProvider", "provide", @@ -11412,6 +11459,7 @@ func (r *ReferenceEnumFromScopedPackage) SetFoo(val scopejsiicalclib.EnumFromSco func (r *ReferenceEnumFromScopedPackage) LoadFoo() scopejsiicalclib.EnumFromScopedModule { var returns scopejsiicalclib.EnumFromScopedModule implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalclib.EnumFromScopedModule)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalclib.EnumFromScopedModule)(nil)).Elem() _jsii_.Invoke( r, "loadFoo", @@ -11674,28 +11722,30 @@ func NewSingleInstanceTwoTypes() SingleInstanceTwoTypesIface { } func (s *SingleInstanceTwoTypes) Interface1() InbetweenClassIface { - var returns *InbetweenClass + var returns InbetweenClassIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*InbetweenClassIface)(nil)).Elem()] = reflect.TypeOf((*InbetweenClass)(nil)).Elem() _jsii_.Invoke( s, "interface1", []interface{}{}, true, - returns, + &returns, implMap, ) return returns } func (s *SingleInstanceTwoTypes) Interface2() IPublicInterfaceIface { - var returns *IPublicInterface + var returns IPublicInterfaceIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IPublicInterfaceIface)(nil)).Elem()] = reflect.TypeOf((*IPublicInterface)(nil)).Elem() _jsii_.Invoke( s, "interface2", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -11842,8 +11892,9 @@ func SomeTypeJsii976_ReturnAnonymous() interface{} { func SomeTypeJsii976_ReturnReturn() IReturnJsii976Iface { _init_.Initialize() - var returns *IReturnJsii976 + var returns IReturnJsii976Iface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*IReturnJsii976Iface)(nil)).Elem()] = reflect.TypeOf((*IReturnJsii976)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.SomeTypeJsii976", "returnReturn", @@ -12408,8 +12459,9 @@ func StructPassing_HowManyVarArgsDidIPass(_positional float64, inputs TopLevelSt func StructPassing_RoundTrip(_positional float64, input TopLevelStructIface) TopLevelStructIface { _init_.Initialize() - var returns *TopLevelStruct + var returns TopLevelStructIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*TopLevelStructIface)(nil)).Elem()] = reflect.TypeOf((*TopLevelStruct)(nil)).Elem() _jsii_.InvokeStatic( "jsii-calc.StructPassing", "roundTrip", @@ -13544,14 +13596,15 @@ func NewUseCalcBase() UseCalcBaseIface { } func (u *UseCalcBase) Hello() scopejsiicalcbase.BaseIface { - var returns *scopejsiicalcbase.Base + var returns scopejsiicalcbase.BaseIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*scopejsiicalcbase.BaseIface)(nil)).Elem()] = reflect.TypeOf((*scopejsiicalcbase.Base)(nil)).Elem() _jsii_.Invoke( u, "hello", []interface{}{}, true, - returns, + &returns, implMap, ) return returns @@ -13664,6 +13717,7 @@ func NewVariadicInvoker(method VariadicMethodIface) VariadicInvokerIface { func (v *VariadicInvoker) AsArray(values float64) []float64 { var returns []float64 implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*float64)(nil)).Elem()] = reflect.TypeOf((*float64)(nil)).Elem() _jsii_.Invoke( v, "asArray", @@ -13700,6 +13754,7 @@ func NewVariadicMethod(prefix float64) VariadicMethodIface { func (v *VariadicMethod) AsArray(first float64, others float64) []float64 { var returns []float64 implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*float64)(nil)).Elem()] = reflect.TypeOf((*float64)(nil)).Elem() _jsii_.Invoke( v, "asArray", @@ -14325,6 +14380,7 @@ package deeplynested import ( _jsii_ "github.com/aws-cdk/jsii/jsii-experimental" + "reflect" ) type INamespacedIface interface { @@ -14405,6 +14461,7 @@ package param import ( _jsii_ "github.com/aws-cdk/jsii/jsii-experimental" + "reflect" ) // SpecialParameterIface is the public interface for the custom type SpecialParameter @@ -14466,14 +14523,15 @@ func NewReturnsSpecialParameter() ReturnsSpecialParameterIface { } func (r *ReturnsSpecialParameter) ReturnsSpecialParam() param.SpecialParameterIface { - var returns *param.SpecialParameter + var returns param.SpecialParameterIface implMap := make(map[reflect.Type]reflect.Type) + implMap[reflect.TypeOf((*param.SpecialParameterIface)(nil)).Elem()] = reflect.TypeOf((*param.SpecialParameter)(nil)).Elem() _jsii_.Invoke( r, "returnsSpecialParam", []interface{}{}, true, - returns, + &returns, implMap, ) return returns