@@ -1364,22 +1364,12 @@ namespace ts {
1364
1364
if ( ! baseTypeNode ) {
1365
1365
return "" ;
1366
1366
}
1367
-
1367
+
1368
1368
const classSymbol = checker . getSymbolOfNode ( classDecl ) ;
1369
1369
1370
1370
const InstantiatedExtendsType = < InterfaceType > checker . getTypeFromTypeReference ( getClassExtendsHeritageClauseElement ( classDecl ) ) ;
1371
1371
const resolvedExtendsType = checker . resolveStructuredTypeMembers ( InstantiatedExtendsType ) ;
1372
1372
1373
- // TODO: (arozga) Should we use the above or this to get the type of the extended class?
1374
- /*
1375
- const classType = <InterfaceType>checker.getTypeOfSymbol(classSymbol);
1376
- let baseType = checker.getBaseTypes(classType)[0];
1377
- const resolvedBaseType = checker.resolveStructuredTypeMembers(baseType);
1378
- if (baseType.objectFlags & ObjectFlags.Reference) {
1379
- baseType = checker.getTypeFromTypeReference(<TypeReference>baseType);
1380
- }
1381
- */
1382
-
1383
1373
const missingMembers = filterMissingMembers ( filterAbstract ( filterNonPrivate ( resolvedExtendsType . members ) ) , classSymbol . members ) ;
1384
1374
1385
1375
return getInsertionsForMembers ( missingMembers , classDecl , checker , newlineChar ) ;
@@ -1394,14 +1384,14 @@ namespace ts {
1394
1384
const classSymbol = checker . getSymbolOfNode ( classDecl ) ;
1395
1385
1396
1386
let implementsIntersectionType : IntersectionType | InterfaceType ;
1397
- if ( implementedTypeNodes . length > 1 ) {
1387
+ if ( implementedTypeNodes . length > 1 ) {
1398
1388
implementsIntersectionType = < IntersectionType > checker . getIntersectionType ( implementedTypeNodes . map ( checker . getTypeFromTypeReference ) ) ;
1399
1389
}
1400
1390
else {
1401
1391
implementsIntersectionType = < InterfaceType > checker . getTypeFromTypeReference ( implementedTypeNodes [ 0 ] ) ;
1402
1392
}
1403
1393
1404
- const structuredType = checker . resolveStructuredTypeMembers ( < IntersectionType | InterfaceType > implementsIntersectionType ) ;
1394
+ const structuredType = checker . resolveStructuredTypeMembers ( < IntersectionType | InterfaceType > implementsIntersectionType ) ;
1405
1395
const missingMembers = filterMissingMembers ( filterNonPrivate ( structuredType . members ) , classSymbol . members ) ;
1406
1396
return getInsertionsForMembers ( missingMembers , classDecl , checker , newlineChar ) ;
1407
1397
}
@@ -1410,11 +1400,11 @@ namespace ts {
1410
1400
* Finds the symbols in source but not target, generating a new map with the differences.
1411
1401
*/
1412
1402
function filterMissingMembers ( sourceSymbols : Map < Symbol > , targetSymbols : Map < Symbol > ) : Map < Symbol > {
1413
- let result : Map < Symbol > = createMap < Symbol > ( ) ;
1403
+ const result : Map < Symbol > = createMap < Symbol > ( ) ;
1414
1404
outer:
1415
- for ( const sourceName in sourceSymbols ) {
1416
- for ( const targetName in targetSymbols ) {
1417
- if ( sourceName === targetName ) {
1405
+ for ( const sourceName in sourceSymbols ) {
1406
+ for ( const targetName in targetSymbols ) {
1407
+ if ( sourceName === targetName ) {
1418
1408
continue outer;
1419
1409
}
1420
1410
}
@@ -1424,7 +1414,7 @@ namespace ts {
1424
1414
}
1425
1415
1426
1416
function filterSymbolMapByDecl ( symbolMap : Map < Symbol > , pred : ( decl : Declaration ) => boolean ) : Map < Symbol > {
1427
- let result = createMap < Symbol > ( ) ;
1417
+ const result = createMap < Symbol > ( ) ;
1428
1418
for ( const key in symbolMap ) {
1429
1419
const decl = symbolMap [ key ] . getDeclarations ( ) ;
1430
1420
Debug . assert ( ! ! ( decl && decl . length ) ) ;
@@ -1436,8 +1426,6 @@ namespace ts {
1436
1426
}
1437
1427
1438
1428
function filterAbstract ( symbolMap : Map < Symbol > ) {
1439
- // TODO: (arozga) use first or second?
1440
- // return mapObject(symbolMap, (key, val) => getModifierFlags(val.getDeclarations()[0]) & ModifierFlags.Abstract ? [key, val]: [undefined, undefined] );
1441
1429
return filterSymbolMapByDecl ( symbolMap , decl => ! ! ( getModifierFlags ( decl ) & ModifierFlags . Abstract ) ) ;
1442
1430
}
1443
1431
@@ -1447,17 +1435,17 @@ namespace ts {
1447
1435
1448
1436
function getInsertionsForMembers ( symbolMap : MapLike < Symbol > , enclosingDeclaration : ClassDeclaration , checker : TypeChecker , newlineChar : string ) : string {
1449
1437
let insertion = "" ;
1450
-
1438
+
1451
1439
for ( const symbolName in symbolMap ) {
1452
1440
insertion = insertion . concat ( getInsertionForMemberSymbol ( symbolMap [ symbolName ] , enclosingDeclaration , checker , newlineChar ) ) ;
1453
1441
}
1454
1442
return insertion ;
1455
1443
}
1456
1444
1457
1445
function getInsertionForMemberSymbol ( symbol : Symbol , enclosingDeclaration : ClassDeclaration , checker : TypeChecker , newlineChar : string ) : string {
1458
- const name = symbol . getName ( ) ;
1459
- const type = checker . getTypeOfSymbol ( symbol ) ;
1460
-
1446
+ const name = symbol . getName ( ) ;
1447
+ const type = checker . getTypeOfSymbol ( symbol ) ;
1448
+
1461
1449
const decls = symbol . getDeclarations ( ) ;
1462
1450
if ( ! ( decls && decls . length ) ) {
1463
1451
return "" ;
@@ -1473,7 +1461,7 @@ namespace ts {
1473
1461
case SyntaxKind . MethodSignature :
1474
1462
case SyntaxKind . MethodDeclaration :
1475
1463
const sigs = checker . getSignaturesOfType ( type , SignatureKind . Call ) ;
1476
- if ( ! ( sigs && sigs . length > 0 ) ) {
1464
+ if ( ! ( sigs && sigs . length > 0 ) ) {
1477
1465
return "" ;
1478
1466
}
1479
1467
// TODO: (arozga) Deal with multiple signatures.
@@ -1489,20 +1477,6 @@ namespace ts {
1489
1477
return `{${ newLineChar } throw new Error('Method not Implemented');${ newLineChar } }${ newLineChar } ` ;
1490
1478
}
1491
1479
1492
- /**
1493
- * Flattens params into a comma-separated list, sandwiched by prefix
1494
- * and suffix on either end.
1495
- */
1496
- /*
1497
- function getCommaSeparatedString(params: string[], prefix: string, suffix: string) {
1498
- let result = prefix;
1499
- for (let i = 0; params && i < params.length; ++i) {
1500
- result += (i > 0 ? "," : "") + params[i];
1501
- }
1502
- return result + suffix;
1503
- }
1504
- */
1505
-
1506
1480
function getVisibilityPrefix ( flags : ModifierFlags ) : string {
1507
1481
if ( flags & ModifierFlags . Public ) {
1508
1482
return "public " ;
@@ -1517,4 +1491,4 @@ namespace ts {
1517
1491
// First token is the open curly, this is where we want to put the 'super' call.
1518
1492
return constructor . body . getFirstToken ( sourceFile ) . getEnd ( ) ;
1519
1493
}
1520
- }
1494
+ }
0 commit comments