Fix ClassDecoratorContext.name to use literal class name (#62870) #62895
+425
−245
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When a class has a static
namegetter or property, the decorator context'snameproperty was incorrectly returning the getter's value instead of the actual class name.This changes the emitted code from:
{ kind: "class", name: _classThis.name, ... }
to:
{ kind: "class", name: "ClassName", ... }
Changes
Source change:
src/compiler/transformers/esDecorators.tsclassNameReferencefromfactory.createPropertyAccessExpression(renamedClassThis, "name")to use the literal class name viafactory.createStringLiteralFromNode(node.name), falling back tonode.emitNode?.assignedNamefor anonymous classes.New test:
tests/cases/conformance/esDecorators/classDeclaration/esDecorators-classDeclaration-classDecoratorContextNameStaticGetter.tsnamegetter, staticnameproperty, and normal class.Baseline updates: 170 files
hereby baseline-acceptname: _classThis.name→ `name: "ClassName"Emitted code change
Before:
After:
Checklist
Backlogmilestone (required)mainbranchhereby runtestslocallyFixes #62870