mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-25 16:07:52 -05:00
add lookup for extends class when implement interface
This commit is contained in:
@@ -7,14 +7,25 @@ namespace ts.codefix {
|
||||
* @returns Empty string iff there are no member insertions.
|
||||
*/
|
||||
export function createMissingMemberNodes(classDeclaration: ClassLikeDeclaration, possiblyMissingSymbols: ReadonlyArray<Symbol>, checker: TypeChecker, preferences: UserPreferences, out: (node: ClassElement) => void): void {
|
||||
const heritageClauseSymbolTable = getHeritageClauseSymbolTable(classDeclaration, checker);
|
||||
|
||||
const classMembers = classDeclaration.symbol.members!;
|
||||
for (const symbol of possiblyMissingSymbols) {
|
||||
if (!classMembers.has(symbol.escapedName)) {
|
||||
if (!classMembers.has(symbol.escapedName) && !(heritageClauseSymbolTable && heritageClauseSymbolTable.has(symbol.escapedName))) {
|
||||
addNewNodeForMemberSymbol(symbol, classDeclaration, checker, preferences, out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getHeritageClauseSymbolTable (classDeclaration: ClassLikeDeclaration, checker: TypeChecker): SymbolTable | undefined {
|
||||
const heritageClauseNode = getClassExtendsHeritageClauseElement(classDeclaration);
|
||||
if (!heritageClauseNode) return undefined;
|
||||
const heritageClauseType = checker.getTypeAtLocation(heritageClauseNode) as InterfaceType;
|
||||
const heritageClauseTypeSymbols = checker.getPropertiesOfType(heritageClauseType);
|
||||
const nonPrivateMembers = heritageClauseTypeSymbols.filter(symbol => !(getModifierFlags(symbol.valueDeclaration) & ModifierFlags.Private));
|
||||
return createSymbolTable(nonPrivateMembers);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns Empty string iff there we can't figure out a representation for `symbol` in `enclosingDeclaration`.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user