@@ -67,6 +67,7 @@ namespace ts.codefix {
67
67
const visibilityModifier = createVisibilityModifier ( getModifierFlags ( declaration ) ) ;
68
68
const modifiers = visibilityModifier ? createNodeArray ( [ visibilityModifier ] ) : undefined ;
69
69
const type = checker . getWidenedType ( checker . getTypeOfSymbolAtLocation ( symbol , enclosingDeclaration ) ) ;
70
+ const optional = ! ! ( symbol . flags & SymbolFlags . Optional ) ;
70
71
71
72
switch ( declaration . kind ) {
72
73
case SyntaxKind . GetAccessor :
@@ -78,7 +79,7 @@ namespace ts.codefix {
78
79
/*decorators*/ undefined ,
79
80
modifiers ,
80
81
name ,
81
- /*questionToken*/ undefined ,
82
+ optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ,
82
83
typeNode ,
83
84
/*initializer*/ undefined ) ;
84
85
return property ;
@@ -96,36 +97,27 @@ namespace ts.codefix {
96
97
return undefined ;
97
98
}
98
99
99
- const optional = ! ! ( symbol . flags & SymbolFlags . Optional ) ;
100
100
if ( declarations . length === 1 ) {
101
101
Debug . assert ( signatures . length === 1 ) ;
102
102
const signature = signatures [ 0 ] ;
103
- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
104
- signatureDeclaration . modifiers = modifiers ;
105
- signatureDeclaration . name = name ;
106
- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
107
- signatureDeclaration . body = createStubbedMethodBody ( ) ;
108
- return signatureDeclaration ;
103
+ return signatureToMethodDeclaration ( signature , enclosingDeclaration , createStubbedMethodBody ( ) ) ;
109
104
}
110
105
111
106
const signatureDeclarations = [ ] ;
112
107
for ( let i = 0 ; i < signatures . length ; i ++ ) {
113
108
const signature = signatures [ i ] ;
114
- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
115
- signatureDeclaration . modifiers = modifiers ;
116
- signatureDeclaration . name = name ;
117
- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
118
- signatureDeclarations . push ( signatureDeclaration ) ;
109
+ const methodDeclaration = signatureToMethodDeclaration ( signature , enclosingDeclaration ) ;
110
+ if ( methodDeclaration ) {
111
+ signatureDeclarations . push ( methodDeclaration ) ;
112
+ }
119
113
}
120
114
121
115
if ( declarations . length > signatures . length ) {
122
116
const signature = checker . getSignatureFromDeclaration ( declarations [ declarations . length - 1 ] as SignatureDeclaration ) ;
123
- const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
124
- signatureDeclaration . modifiers = modifiers ;
125
- signatureDeclaration . name = name ;
126
- signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
127
- signatureDeclaration . body = createStubbedMethodBody ( ) ;
128
- signatureDeclarations . push ( signatureDeclaration ) ;
117
+ const methodDeclaration = signatureToMethodDeclaration ( signature , enclosingDeclaration , createStubbedMethodBody ( ) ) ;
118
+ if ( methodDeclaration ) {
119
+ signatureDeclarations . push ( methodDeclaration ) ;
120
+ }
129
121
}
130
122
else {
131
123
Debug . assert ( declarations . length === signatures . length ) ;
@@ -136,6 +128,17 @@ namespace ts.codefix {
136
128
default :
137
129
return undefined ;
138
130
}
131
+
132
+ function signatureToMethodDeclaration ( signature : Signature , enclosingDeclaration : Node , body ?: Block ) {
133
+ const signatureDeclaration = < MethodDeclaration > checker . signatureToSignatureDeclaration ( signature , SyntaxKind . MethodDeclaration , enclosingDeclaration ) ;
134
+ if ( signatureDeclaration ) {
135
+ signatureDeclaration . modifiers = modifiers ;
136
+ signatureDeclaration . name = name ;
137
+ signatureDeclaration . questionToken = optional ? createToken ( SyntaxKind . QuestionToken ) : undefined ;
138
+ signatureDeclaration . body = body ;
139
+ }
140
+ return signatureDeclaration ;
141
+ }
139
142
}
140
143
141
144
function createMethodImplementingSignatures ( signatures : Signature [ ] , name : PropertyName , optional : boolean , modifiers : Modifier [ ] | undefined ) : MethodDeclaration {
0 commit comments