Skip to content

Commit 571bce5

Browse files
committed
Emit generated name for unnamed default exported class with decorated members
1 parent 77e96b6 commit 571bce5

17 files changed

+235
-1
lines changed

src/compiler/transformers/ts.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,9 +521,10 @@ namespace ts {
521521
// emit name if
522522
// - node has a name
523523
// - node has static initializers
524+
// - node has a member that is decorated
524525
//
525526
let name = node.name;
526-
if (!name && staticProperties.length > 0) {
527+
if (!name && (staticProperties.length > 0 || childIsDecorated(node))) {
527528
name = getGeneratedNameForNode(node);
528529
}
529530

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [decoratorOnClassAccessor1.es6.ts]
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
4+
export default class {
5+
@dec get accessor() { return 1; }
6+
}
7+
8+
//// [decoratorOnClassAccessor1.es6.js]
9+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13+
return c > 3 && r && Object.defineProperty(target, key, r), r;
14+
};
15+
export default class default_1 {
16+
get accessor() { return 1; }
17+
}
18+
__decorate([
19+
dec
20+
], default_1.prototype, "accessor", null);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/es6/decorators/class/accessor/decoratorOnClassAccessor1.es6.ts ===
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
>dec : Symbol(dec, Decl(decoratorOnClassAccessor1.es6.ts, 0, 0))
4+
>T : Symbol(T, Decl(decoratorOnClassAccessor1.es6.ts, 0, 21))
5+
>target : Symbol(target, Decl(decoratorOnClassAccessor1.es6.ts, 0, 24))
6+
>propertyKey : Symbol(propertyKey, Decl(decoratorOnClassAccessor1.es6.ts, 0, 36))
7+
>descriptor : Symbol(descriptor, Decl(decoratorOnClassAccessor1.es6.ts, 0, 57))
8+
>TypedPropertyDescriptor : Symbol(TypedPropertyDescriptor, Decl(lib.es5.d.ts, --, --))
9+
>T : Symbol(T, Decl(decoratorOnClassAccessor1.es6.ts, 0, 21))
10+
>TypedPropertyDescriptor : Symbol(TypedPropertyDescriptor, Decl(lib.es5.d.ts, --, --))
11+
>T : Symbol(T, Decl(decoratorOnClassAccessor1.es6.ts, 0, 21))
12+
13+
export default class {
14+
@dec get accessor() { return 1; }
15+
>dec : Symbol(dec, Decl(decoratorOnClassAccessor1.es6.ts, 0, 0))
16+
>accessor : Symbol(default.accessor, Decl(decoratorOnClassAccessor1.es6.ts, 2, 22))
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/conformance/es6/decorators/class/accessor/decoratorOnClassAccessor1.es6.ts ===
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
>dec : <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>
4+
>T : T
5+
>target : any
6+
>propertyKey : string
7+
>descriptor : TypedPropertyDescriptor<T>
8+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
9+
>T : T
10+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
11+
>T : T
12+
13+
export default class {
14+
@dec get accessor() { return 1; }
15+
>dec : <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>
16+
>accessor : number
17+
>1 : 1
18+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//// [decoratorOnClassMethod1.es6.ts]
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
4+
export default class {
5+
@dec method() {}
6+
}
7+
8+
//// [decoratorOnClassMethod1.es6.js]
9+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13+
return c > 3 && r && Object.defineProperty(target, key, r), r;
14+
};
15+
export default class default_1 {
16+
method() { }
17+
}
18+
__decorate([
19+
dec
20+
], default_1.prototype, "method", null);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/es6/decorators/class/method/decoratorOnClassMethod1.es6.ts ===
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
>dec : Symbol(dec, Decl(decoratorOnClassMethod1.es6.ts, 0, 0))
4+
>T : Symbol(T, Decl(decoratorOnClassMethod1.es6.ts, 0, 21))
5+
>target : Symbol(target, Decl(decoratorOnClassMethod1.es6.ts, 0, 24))
6+
>propertyKey : Symbol(propertyKey, Decl(decoratorOnClassMethod1.es6.ts, 0, 36))
7+
>descriptor : Symbol(descriptor, Decl(decoratorOnClassMethod1.es6.ts, 0, 57))
8+
>TypedPropertyDescriptor : Symbol(TypedPropertyDescriptor, Decl(lib.es5.d.ts, --, --))
9+
>T : Symbol(T, Decl(decoratorOnClassMethod1.es6.ts, 0, 21))
10+
>TypedPropertyDescriptor : Symbol(TypedPropertyDescriptor, Decl(lib.es5.d.ts, --, --))
11+
>T : Symbol(T, Decl(decoratorOnClassMethod1.es6.ts, 0, 21))
12+
13+
export default class {
14+
@dec method() {}
15+
>dec : Symbol(dec, Decl(decoratorOnClassMethod1.es6.ts, 0, 0))
16+
>method : Symbol(default.method, Decl(decoratorOnClassMethod1.es6.ts, 2, 22))
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/conformance/es6/decorators/class/method/decoratorOnClassMethod1.es6.ts ===
2+
declare function dec<T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T>;
3+
>dec : <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>
4+
>T : T
5+
>target : any
6+
>propertyKey : string
7+
>descriptor : TypedPropertyDescriptor<T>
8+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
9+
>T : T
10+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
11+
>T : T
12+
13+
export default class {
14+
@dec method() {}
15+
>dec : <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>
16+
>method : () => void
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [decoratorOnClassMethodParameter1.es6.ts]
2+
declare function dec(target: Object, propertyKey: string | symbol, parameterIndex: number): void;
3+
4+
export default class {
5+
method(@dec p: number) {}
6+
}
7+
8+
//// [decoratorOnClassMethodParameter1.es6.js]
9+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13+
return c > 3 && r && Object.defineProperty(target, key, r), r;
14+
};
15+
var __param = (this && this.__param) || function (paramIndex, decorator) {
16+
return function (target, key) { decorator(target, key, paramIndex); }
17+
};
18+
export default class default_1 {
19+
method(p) { }
20+
}
21+
__decorate([
22+
__param(0, dec)
23+
], default_1.prototype, "method", null);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/conformance/es6/decorators/class/method/parameter/decoratorOnClassMethodParameter1.es6.ts ===
2+
declare function dec(target: Object, propertyKey: string | symbol, parameterIndex: number): void;
3+
>dec : Symbol(dec, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 0))
4+
>target : Symbol(target, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 21))
5+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --))
6+
>propertyKey : Symbol(propertyKey, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 36))
7+
>parameterIndex : Symbol(parameterIndex, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 66))
8+
9+
export default class {
10+
method(@dec p: number) {}
11+
>method : Symbol(default.method, Decl(decoratorOnClassMethodParameter1.es6.ts, 2, 22))
12+
>dec : Symbol(dec, Decl(decoratorOnClassMethodParameter1.es6.ts, 0, 0))
13+
>p : Symbol(p, Decl(decoratorOnClassMethodParameter1.es6.ts, 3, 11))
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/conformance/es6/decorators/class/method/parameter/decoratorOnClassMethodParameter1.es6.ts ===
2+
declare function dec(target: Object, propertyKey: string | symbol, parameterIndex: number): void;
3+
>dec : (target: Object, propertyKey: string | symbol, parameterIndex: number) => void
4+
>target : Object
5+
>Object : Object
6+
>propertyKey : string | symbol
7+
>parameterIndex : number
8+
9+
export default class {
10+
method(@dec p: number) {}
11+
>method : (p: number) => void
12+
>dec : (target: Object, propertyKey: string | symbol, parameterIndex: number) => void
13+
>p : number
14+
}

0 commit comments

Comments
 (0)