@@ -126,7 +126,7 @@ namespace ts.codefix {
126126 }
127127 else {
128128 Debug . assert ( declarations . length === signatures . length ) ;
129- const methodImplementingSignatures = createMethodImplementingSignatures ( signatures , enclosingDeclaration , name , modifiers ) ;
129+ const methodImplementingSignatures = createMethodImplementingSignatures ( signatures , name , modifiers ) ;
130130 signatureDeclarations . push ( methodImplementingSignatures ) ;
131131 }
132132 return signatureDeclarations ;
@@ -135,11 +135,8 @@ namespace ts.codefix {
135135 }
136136 }
137137
138- // TODO: infer types of arguments?
139- function createMethodImplementingSignatures ( signatures : Signature [ ] , enclosingDeclaration : ClassLikeDeclaration , name : string , modifiers : Modifier [ ] | undefined ) : MethodDeclaration {
140- const newMethodDeclaration = createNode ( SyntaxKind . CallSignature ) as SignatureDeclaration ;
141- newMethodDeclaration . parent = enclosingDeclaration ;
142- newMethodDeclaration . name = signatures [ 0 ] . getDeclaration ( ) . name ;
138+ function createMethodImplementingSignatures ( signatures : Signature [ ] , name : string , modifiers : Modifier [ ] | undefined ) : MethodDeclaration {
139+ Debug . assert ( signatures && signatures . length > 0 ) ;
143140
144141 let maxNonRestArgs = - 1 ;
145142 let maxArgsIndex = 0 ;
@@ -157,46 +154,45 @@ namespace ts.codefix {
157154 }
158155 const maxArgsParameterSymbolNames = signatures [ maxArgsIndex ] . getParameters ( ) . map ( symbol => symbol . getName ( ) ) ;
159156
160- const parameters = createNodeArray < ParameterDeclaration > ( ) ;
157+ const parameters : ParameterDeclaration [ ] = [ ] ;
161158 for ( let i = 0 ; i < maxNonRestArgs ; i ++ ) {
159+ const anyType = createKeywordTypeNode ( SyntaxKind . AnyKeyword ) ;
162160 const newParameter = createParameter (
163161 /*decorators*/ undefined
164162 , /*modifiers*/ undefined
165163 , /*dotDotDotToken*/ undefined
166164 , maxArgsParameterSymbolNames [ i ]
167165 , /*questionToken*/ i >= minArgumentCount ? createToken ( SyntaxKind . QuestionToken ) : undefined
168- , /*type*/ undefined
166+ , anyType
169167 , /*initializer*/ undefined ) ;
170168 parameters . push ( newParameter ) ;
171169 }
172170
173171 if ( hasRestParameter ) {
172+ const anyType = createKeywordTypeNode ( SyntaxKind . AnyKeyword ) ;
174173 const restParameter = createParameter (
175174 /*decorators*/ undefined
176175 , /*modifiers*/ undefined
177176 , createToken ( SyntaxKind . DotDotDotToken )
178177 , maxArgsParameterSymbolNames [ maxNonRestArgs ] || "rest"
179178 , /*questionToken*/ maxNonRestArgs >= minArgumentCount ? createToken ( SyntaxKind . QuestionToken ) : undefined
180- , /*type*/ undefined
179+ , anyType
181180 , /*initializer*/ undefined ) ;
182181 parameters . push ( restParameter ) ;
183182 }
184183
185- return createMethod (
186- /*decorators*/ undefined
187- , modifiers
188- , /*asteriskToken*/ undefined
184+ return createStubbedMethod (
185+ modifiers
189186 , name
190187 , /*typeParameters*/ undefined
191188 , parameters
192- , /*type*/ undefined
193- , /*body*/ undefined ) ;
189+ , /*returnType*/ undefined ) ;
194190 }
195191
196- export function createStubbedMethod ( modifiers : Modifier [ ] , name : string , typeParameters : TypeParameterDeclaration [ ] | undefined , parameters : ParameterDeclaration [ ] , returnType ? : TypeNode ) {
192+ export function createStubbedMethod ( modifiers : Modifier [ ] , name : string , typeParameters : TypeParameterDeclaration [ ] | undefined , parameters : ParameterDeclaration [ ] , returnType : TypeNode | undefined ) {
197193 return createMethod (
198194 /*decorators*/ undefined
199- , /*modifiers*/ modifiers
195+ , modifiers
200196 , /*asteriskToken*/ undefined
201197 , name
202198 , typeParameters
@@ -231,12 +227,13 @@ namespace ts.codefix {
231227 const parameterTypeNode = checker . createTypeNode ( parameterType ) ;
232228 // TODO: deep cloning of decorators/any node.
233229 const parameterNode = createParameter (
234- parameterDeclaration . decorators && parameterDeclaration . decorators . map ( getSynthesizedClone )
235- , parameterDeclaration . modifiers && parameterDeclaration . modifiers . map ( getSynthesizedClone )
230+ parameterDeclaration . decorators && parameterDeclaration . decorators . map ( getSynthesizedDeepClone )
231+ , parameterDeclaration . modifiers && parameterDeclaration . modifiers . map ( getSynthesizedDeepClone )
236232 , parameterDeclaration . dotDotDotToken && createToken ( SyntaxKind . DotDotDotToken )
237- , parameterDeclaration . name
233+ , getSynthesizedDeepClone ( parameterDeclaration . name )
238234 , parameterDeclaration . questionToken && createToken ( SyntaxKind . QuestionToken )
239- , parameterTypeNode ) ;
235+ , parameterTypeNode
236+ , /*initializer*/ undefined ) ;
240237 return parameterNode ;
241238 }
242239
0 commit comments