@@ -41,7 +41,6 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
41
41
const fieldInfo = getConvertibleFieldAtPosition ( context ) ;
42
42
if ( ! fieldInfo ) return undefined ;
43
43
44
- const isJS = isSourceFileJS ( file ) ;
45
44
const changeTracker = textChanges . ChangeTracker . fromContext ( context ) ;
46
45
const { isStatic, isReadonly, fieldName, accessorName, originalName, type, container, declaration, renameAccessor } = fieldInfo ;
47
46
@@ -50,15 +49,20 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
50
49
suppressLeadingAndTrailingTrivia ( declaration ) ;
51
50
suppressLeadingAndTrailingTrivia ( container ) ;
52
51
53
- const isInClassLike = isClassLike ( container ) ;
54
- // avoid Readonly modifier because it will convert to get accessor
55
- const modifierFlags = getModifierFlags ( declaration ) & ~ ModifierFlags . Readonly ;
56
- const accessorModifiers = isInClassLike
57
- ? ! modifierFlags || modifierFlags & ModifierFlags . Private
58
- ? getModifiers ( isJS , isStatic , SyntaxKind . PublicKeyword )
59
- : createNodeArray ( createModifiersFromModifierFlags ( modifierFlags ) )
60
- : undefined ;
61
- const fieldModifiers = isInClassLike ? getModifiers ( isJS , isStatic , SyntaxKind . PrivateKeyword ) : undefined ;
52
+ let accessorModifiers : ModifiersArray | undefined ;
53
+ let fieldModifiers : ModifiersArray | undefined ;
54
+ if ( isClassLike ( container ) ) {
55
+ const modifierFlags = getModifierFlags ( declaration ) ;
56
+ if ( isSourceFileJS ( file ) ) {
57
+ const modifiers = createModifiers ( modifierFlags ) ;
58
+ accessorModifiers = modifiers ;
59
+ fieldModifiers = modifiers ;
60
+ }
61
+ else {
62
+ accessorModifiers = createModifiers ( prepareModifierFlagsForAccessor ( modifierFlags ) ) ;
63
+ fieldModifiers = createModifiers ( prepareModifierFlagsForField ( modifierFlags ) ) ;
64
+ }
65
+ }
62
66
63
67
updateFieldDeclaration ( changeTracker , file , declaration , fieldName , fieldModifiers ) ;
64
68
@@ -105,12 +109,26 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
105
109
return isIdentifier ( fieldName ) ? createPropertyAccess ( leftHead , fieldName ) : createElementAccess ( leftHead , createLiteral ( fieldName ) ) ;
106
110
}
107
111
108
- function getModifiers ( isJS : boolean , isStatic : boolean , accessModifier : SyntaxKind . PublicKeyword | SyntaxKind . PrivateKeyword ) : NodeArray < Modifier > | undefined {
109
- const modifiers = append < Modifier > (
110
- ! isJS ? [ createToken ( accessModifier ) as Token < SyntaxKind . PublicKeyword > | Token < SyntaxKind . PrivateKeyword > ] : undefined ,
111
- isStatic ? createToken ( SyntaxKind . StaticKeyword ) : undefined
112
- ) ;
113
- return modifiers && createNodeArray ( modifiers ) ;
112
+ function createModifiers ( modifierFlags : ModifierFlags ) : ModifiersArray | undefined {
113
+ return modifierFlags ? createNodeArray ( createModifiersFromModifierFlags ( modifierFlags ) ) : undefined ;
114
+ }
115
+
116
+ function prepareModifierFlagsForAccessor ( modifierFlags : ModifierFlags ) : ModifierFlags {
117
+ modifierFlags &= ~ ModifierFlags . Readonly ; // avoid Readonly modifier because it will convert to get accessor
118
+ modifierFlags &= ~ ModifierFlags . Private ;
119
+
120
+ if ( ! ( modifierFlags & ModifierFlags . Protected ) ) {
121
+ modifierFlags |= ModifierFlags . Public ;
122
+ }
123
+
124
+ return modifierFlags ;
125
+ }
126
+
127
+ function prepareModifierFlagsForField ( modifierFlags : ModifierFlags ) : ModifierFlags {
128
+ modifierFlags &= ~ ModifierFlags . Public ;
129
+ modifierFlags &= ~ ModifierFlags . Protected ;
130
+ modifierFlags |= ModifierFlags . Private ;
131
+ return modifierFlags ;
114
132
}
115
133
116
134
function getConvertibleFieldAtPosition ( context : RefactorContext ) : Info | undefined {
0 commit comments