@@ -154,6 +154,7 @@ import {
154
154
Modifier ,
155
155
ModifierFlags ,
156
156
ModifierLike ,
157
+ modifiersToFlags ,
157
158
moveRangePastModifiers ,
158
159
moveRangePos ,
159
160
newPrivateEnvironment ,
@@ -896,6 +897,12 @@ export function transformClassFields(context: TransformationContext): (x: Source
896
897
}
897
898
}
898
899
900
+ function getClassThis ( ) {
901
+ const lex = getClassLexicalEnvironment ( ) ;
902
+ const classThis = lex . classThis ?? lex . classConstructor ?? currentClassContainer ?. name ;
903
+ return Debug . checkDefined ( classThis ) ;
904
+ }
905
+
899
906
function transformAutoAccessor ( node : AutoAccessorPropertyDeclaration ) : VisitResult < Node > {
900
907
// transforms:
901
908
// accessor x = 1;
@@ -935,12 +942,15 @@ export function transformClassFields(context: TransformationContext): (x: Source
935
942
setEmitFlags ( backingField , EmitFlags . NoComments ) ;
936
943
setSourceMapRange ( backingField , sourceMapRange ) ;
937
944
938
- const getter = createAccessorPropertyGetRedirector ( factory , node , modifiers , getterName ) ;
945
+ const receiver = isStatic ( node ) ? getClassThis ( ) : factory . createThis ( ) ;
946
+ const getter = createAccessorPropertyGetRedirector ( factory , node , modifiers , getterName , receiver ) ;
939
947
setOriginalNode ( getter , node ) ;
940
948
setCommentRange ( getter , commentRange ) ;
941
949
setSourceMapRange ( getter , sourceMapRange ) ;
942
950
943
- const setter = createAccessorPropertySetRedirector ( factory , node , modifiers , setterName ) ;
951
+ // create a fresh copy of the modifiers so that we don't duplicate comments
952
+ const setterModifiers = factory . createModifiersFromModifierFlags ( modifiersToFlags ( modifiers ) ) ;
953
+ const setter = createAccessorPropertySetRedirector ( factory , node , setterModifiers , setterName , receiver ) ;
944
954
setOriginalNode ( setter , node ) ;
945
955
setEmitFlags ( setter , EmitFlags . NoComments ) ;
946
956
setSourceMapRange ( setter , sourceMapRange ) ;
@@ -1692,11 +1702,13 @@ export function transformClassFields(context: TransformationContext): (x: Source
1692
1702
let containsInstanceAutoAccessors = false ;
1693
1703
for ( const member of node . members ) {
1694
1704
if ( isStatic ( member ) ) {
1695
- if ( member . name &&
1696
- ( isPrivateIdentifier ( member . name ) || isAutoAccessorPropertyDeclaration ( member ) ) &&
1705
+ if ( member . name && ( isPrivateIdentifier ( member . name ) || isAutoAccessorPropertyDeclaration ( member ) ) &&
1697
1706
shouldTransformPrivateElementsOrClassStaticBlocks ) {
1698
1707
facts |= ClassFacts . NeedsClassConstructorReference ;
1699
1708
}
1709
+ else if ( isAutoAccessorPropertyDeclaration ( member ) && shouldTransformAutoAccessors === Ternary . True && ! node . name && ! node . emitNode ?. classThis ) {
1710
+ facts |= ClassFacts . NeedsClassConstructorReference ;
1711
+ }
1700
1712
if ( isPropertyDeclaration ( member ) || isClassStaticBlockDeclaration ( member ) ) {
1701
1713
if ( shouldTransformThisInStaticInitializers && member . transformFlags & TransformFlags . ContainsLexicalThis ) {
1702
1714
facts |= ClassFacts . NeedsSubstitutionForThisInClassStaticField ;
@@ -1846,10 +1858,10 @@ export function transformClassFields(context: TransformationContext): (x: Source
1846
1858
getClassLexicalEnvironment ( ) . classConstructor = factory . cloneNode ( temp ) ;
1847
1859
pendingClassReferenceAssignment = factory . createAssignment ( temp , factory . getInternalName ( node ) ) ;
1848
1860
}
1861
+ }
1849
1862
1850
- if ( node . emitNode ?. classThis ) {
1851
- getClassLexicalEnvironment ( ) . classThis = node . emitNode . classThis ;
1852
- }
1863
+ if ( node . emitNode ?. classThis ) {
1864
+ getClassLexicalEnvironment ( ) . classThis = node . emitNode . classThis ;
1853
1865
}
1854
1866
1855
1867
const isClassWithConstructorReference = resolver . getNodeCheckFlags ( node ) & NodeCheckFlags . ContainsConstructorReference ;
0 commit comments