@@ -154,6 +154,7 @@ import {
154154 Modifier ,
155155 ModifierFlags ,
156156 ModifierLike ,
157+ modifiersToFlags ,
157158 moveRangePastModifiers ,
158159 moveRangePos ,
159160 newPrivateEnvironment ,
@@ -896,6 +897,12 @@ export function transformClassFields(context: TransformationContext): (x: Source
896897 }
897898 }
898899
900+ function getClassThis ( ) {
901+ const lex = getClassLexicalEnvironment ( ) ;
902+ const classThis = lex . classThis ?? lex . classConstructor ?? currentClassContainer ?. name ;
903+ return Debug . checkDefined ( classThis ) ;
904+ }
905+
899906 function transformAutoAccessor ( node : AutoAccessorPropertyDeclaration ) : VisitResult < Node > {
900907 // transforms:
901908 // accessor x = 1;
@@ -935,12 +942,15 @@ export function transformClassFields(context: TransformationContext): (x: Source
935942 setEmitFlags ( backingField , EmitFlags . NoComments ) ;
936943 setSourceMapRange ( backingField , sourceMapRange ) ;
937944
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 ) ;
939947 setOriginalNode ( getter , node ) ;
940948 setCommentRange ( getter , commentRange ) ;
941949 setSourceMapRange ( getter , sourceMapRange ) ;
942950
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 ) ;
944954 setOriginalNode ( setter , node ) ;
945955 setEmitFlags ( setter , EmitFlags . NoComments ) ;
946956 setSourceMapRange ( setter , sourceMapRange ) ;
@@ -1692,11 +1702,13 @@ export function transformClassFields(context: TransformationContext): (x: Source
16921702 let containsInstanceAutoAccessors = false ;
16931703 for ( const member of node . members ) {
16941704 if ( isStatic ( member ) ) {
1695- if ( member . name &&
1696- ( isPrivateIdentifier ( member . name ) || isAutoAccessorPropertyDeclaration ( member ) ) &&
1705+ if ( member . name && ( isPrivateIdentifier ( member . name ) || isAutoAccessorPropertyDeclaration ( member ) ) &&
16971706 shouldTransformPrivateElementsOrClassStaticBlocks ) {
16981707 facts |= ClassFacts . NeedsClassConstructorReference ;
16991708 }
1709+ else if ( isAutoAccessorPropertyDeclaration ( member ) && shouldTransformAutoAccessors === Ternary . True && ! node . name && ! node . emitNode ?. classThis ) {
1710+ facts |= ClassFacts . NeedsClassConstructorReference ;
1711+ }
17001712 if ( isPropertyDeclaration ( member ) || isClassStaticBlockDeclaration ( member ) ) {
17011713 if ( shouldTransformThisInStaticInitializers && member . transformFlags & TransformFlags . ContainsLexicalThis ) {
17021714 facts |= ClassFacts . NeedsSubstitutionForThisInClassStaticField ;
@@ -1846,10 +1858,10 @@ export function transformClassFields(context: TransformationContext): (x: Source
18461858 getClassLexicalEnvironment ( ) . classConstructor = factory . cloneNode ( temp ) ;
18471859 pendingClassReferenceAssignment = factory . createAssignment ( temp , factory . getInternalName ( node ) ) ;
18481860 }
1861+ }
18491862
1850- if ( node . emitNode ?. classThis ) {
1851- getClassLexicalEnvironment ( ) . classThis = node . emitNode . classThis ;
1852- }
1863+ if ( node . emitNode ?. classThis ) {
1864+ getClassLexicalEnvironment ( ) . classThis = node . emitNode . classThis ;
18531865 }
18541866
18551867 const isClassWithConstructorReference = resolver . getNodeCheckFlags ( node ) & NodeCheckFlags . ContainsConstructorReference ;
0 commit comments