diff --git a/tsc/internal/transformers/tstransforms/typeserializer.go b/tsc/internal/transformers/tstransforms/typeserializer.go index 21c5d183370a5..26029e356adbe 100644 --- a/tsc/internal/transformers/tstransforms/typeserializer.go +++ b/tsc/internal/transformers/tstransforms/typeserializer.go @@ -77,8 +77,9 @@ func getSetAccessorTypeAnnotationNode(node *ast.SetAccessorDeclaration) *ast.Nod func getAccessorTypeNode(node *ast.Node, container *ast.Node) *ast.Node { accessors := ast.GetAllAccessorDeclarations(container.Members(), node) - if accessors.SetAccessor != nil { - return getSetAccessorTypeAnnotationNode(accessors.SetAccessor) + typeNode := getSetAccessorTypeAnnotationNode(accessors.SetAccessor) + if typeNode != nil { + return typeNode } if accessors.GetAccessor != nil { return accessors.GetAccessor.Type diff --git a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).js b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).js index f9f5ce9b5dc30..9ec527b80d109 100644 --- a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).js +++ b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).js @@ -29,7 +29,42 @@ class E { class F { @dec set x(value: number) { } -} +} + +class G { + @dec get x(): string { return ""; } + set x(value) { } +} + +class H { + get x(): string { return ""; } + @dec set x(value) { } +} + +class I { + @dec set x(value) { } + get x(): string { return ""; } +} + +class J { + set x(value) { } + @dec get x(): string { return ""; } +} + +class K { + @dec get x(): string { return ""; } +} + +class L { + @dec get x(): string { return ""; } + set x(value: any) { } +} + +class M { + @dec static get x(): number { return 0; } + static set x(value) { } +} + //// [decoratorOnClassAccessor8.js] "use strict"; @@ -94,3 +129,65 @@ __decorate([ __metadata("design:type", Number), __metadata("design:paramtypes", [Number]) ], F.prototype, "x", null); +class G { + get x() { return ""; } + set x(value) { } +} +__decorate([ + dec, + __metadata("design:type", String), + __metadata("design:paramtypes", [Object]) +], G.prototype, "x", null); +class H { + get x() { return ""; } + set x(value) { } +} +__decorate([ + dec, + __metadata("design:type", String), + __metadata("design:paramtypes", [Object]) +], H.prototype, "x", null); +class I { + set x(value) { } + get x() { return ""; } +} +__decorate([ + dec, + __metadata("design:type", String), + __metadata("design:paramtypes", [Object]) +], I.prototype, "x", null); +class J { + set x(value) { } + get x() { return ""; } +} +__decorate([ + dec, + __metadata("design:type", String), + __metadata("design:paramtypes", [Object]) +], J.prototype, "x", null); +class K { + get x() { return ""; } +} +__decorate([ + dec, + __metadata("design:type", String), + __metadata("design:paramtypes", []) +], K.prototype, "x", null); +class L { + get x() { return ""; } + set x(value) { } +} +__decorate([ + dec, + __metadata("design:type", Object), + __metadata("design:paramtypes", [Object]) +], L.prototype, "x", null); +class M { + static get x() { return 0; } + static set x(value) { } +} +__decorate([ + dec, + __metadata("design:type", Number), + __metadata("design:paramtypes", [Object]) +], M, "x", null); diff --git a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).symbols b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).symbols index f1090799a164e..2db7597e228fb 100644 --- a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).symbols +++ b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).symbols @@ -76,3 +76,84 @@ class F { >x : Symbol(F.x, Decl(decoratorOnClassAccessor8.ts, 26, 9)) >value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 27, 15)) } + +class G { +>G : Symbol(G, Decl(decoratorOnClassAccessor8.ts, 28, 1)) + + @dec get x(): string { return ""; } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(G.x, Decl(decoratorOnClassAccessor8.ts, 30, 9), Decl(decoratorOnClassAccessor8.ts, 31, 39)) + + set x(value) { } +>x : Symbol(G.x, Decl(decoratorOnClassAccessor8.ts, 30, 9), Decl(decoratorOnClassAccessor8.ts, 31, 39)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 32, 10)) +} + +class H { +>H : Symbol(H, Decl(decoratorOnClassAccessor8.ts, 33, 1)) + + get x(): string { return ""; } +>x : Symbol(H.x, Decl(decoratorOnClassAccessor8.ts, 35, 9), Decl(decoratorOnClassAccessor8.ts, 36, 34)) + + @dec set x(value) { } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(H.x, Decl(decoratorOnClassAccessor8.ts, 35, 9), Decl(decoratorOnClassAccessor8.ts, 36, 34)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 37, 15)) +} + +class I { +>I : Symbol(I, Decl(decoratorOnClassAccessor8.ts, 38, 1)) + + @dec set x(value) { } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(I.x, Decl(decoratorOnClassAccessor8.ts, 40, 9), Decl(decoratorOnClassAccessor8.ts, 41, 25)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 41, 15)) + + get x(): string { return ""; } +>x : Symbol(I.x, Decl(decoratorOnClassAccessor8.ts, 40, 9), Decl(decoratorOnClassAccessor8.ts, 41, 25)) +} + +class J { +>J : Symbol(J, Decl(decoratorOnClassAccessor8.ts, 43, 1)) + + set x(value) { } +>x : Symbol(J.x, Decl(decoratorOnClassAccessor8.ts, 45, 9), Decl(decoratorOnClassAccessor8.ts, 46, 20)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 46, 10)) + + @dec get x(): string { return ""; } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(J.x, Decl(decoratorOnClassAccessor8.ts, 45, 9), Decl(decoratorOnClassAccessor8.ts, 46, 20)) +} + +class K { +>K : Symbol(K, Decl(decoratorOnClassAccessor8.ts, 48, 1)) + + @dec get x(): string { return ""; } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(K.x, Decl(decoratorOnClassAccessor8.ts, 50, 9)) +} + +class L { +>L : Symbol(L, Decl(decoratorOnClassAccessor8.ts, 52, 1)) + + @dec get x(): string { return ""; } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(L.x, Decl(decoratorOnClassAccessor8.ts, 54, 9), Decl(decoratorOnClassAccessor8.ts, 55, 39)) + + set x(value: any) { } +>x : Symbol(L.x, Decl(decoratorOnClassAccessor8.ts, 54, 9), Decl(decoratorOnClassAccessor8.ts, 55, 39)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 56, 10)) +} + +class M { +>M : Symbol(M, Decl(decoratorOnClassAccessor8.ts, 57, 1)) + + @dec static get x(): number { return 0; } +>dec : Symbol(dec, Decl(decoratorOnClassAccessor8.ts, 0, 0)) +>x : Symbol(M.x, Decl(decoratorOnClassAccessor8.ts, 59, 9), Decl(decoratorOnClassAccessor8.ts, 60, 45)) + + static set x(value) { } +>x : Symbol(M.x, Decl(decoratorOnClassAccessor8.ts, 59, 9), Decl(decoratorOnClassAccessor8.ts, 60, 45)) +>value : Symbol(value, Decl(decoratorOnClassAccessor8.ts, 61, 17)) +} + diff --git a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).types b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).types index 935e9865313c7..c99c0e7011e4d 100644 --- a/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).types +++ b/tsc/testdata/baselines/reference/conformance/decoratorOnClassAccessor8(target=es2015).types @@ -76,3 +76,91 @@ class F { >x : number >value : number } + +class G { +>G : G + + @dec get x(): string { return ""; } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>"" : "" + + set x(value) { } +>x : string +>value : string +} + +class H { +>H : H + + get x(): string { return ""; } +>x : string +>"" : "" + + @dec set x(value) { } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>value : string +} + +class I { +>I : I + + @dec set x(value) { } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>value : string + + get x(): string { return ""; } +>x : string +>"" : "" +} + +class J { +>J : J + + set x(value) { } +>x : string +>value : string + + @dec get x(): string { return ""; } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>"" : "" +} + +class K { +>K : K + + @dec get x(): string { return ""; } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>"" : "" +} + +class L { +>L : L + + @dec get x(): string { return ""; } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : string +>"" : "" + + set x(value: any) { } +>x : string +>value : any +} + +class M { +>M : M + + @dec static get x(): number { return 0; } +>dec : (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>x : number +>0 : 0 + + static set x(value) { } +>x : number +>value : number +} + diff --git a/tsc/testdata/tests/cases/conformance/decorators/class/accessor/decoratorOnClassAccessor8.ts b/tsc/testdata/tests/cases/conformance/decorators/class/accessor/decoratorOnClassAccessor8.ts index 64942b1b347d8..b4ee031fb8e5e 100644 --- a/tsc/testdata/tests/cases/conformance/decorators/class/accessor/decoratorOnClassAccessor8.ts +++ b/tsc/testdata/tests/cases/conformance/decorators/class/accessor/decoratorOnClassAccessor8.ts @@ -29,4 +29,38 @@ class E { class F { @dec set x(value: number) { } -} \ No newline at end of file +} + +class G { + @dec get x(): string { return ""; } + set x(value) { } +} + +class H { + get x(): string { return ""; } + @dec set x(value) { } +} + +class I { + @dec set x(value) { } + get x(): string { return ""; } +} + +class J { + set x(value) { } + @dec get x(): string { return ""; } +} + +class K { + @dec get x(): string { return ""; } +} + +class L { + @dec get x(): string { return ""; } + set x(value: any) { } +} + +class M { + @dec static get x(): number { return 0; } + static set x(value) { } +}