Recognize modifiers

This commit is contained in:
Arthur Ozga 2016-11-01 17:19:06 -07:00
parent 324000020c
commit 0380f3f38e
6 changed files with 23 additions and 20 deletions

View File

@ -1308,7 +1308,7 @@ namespace ts {
/**
* Resolves a qualified name and any involved aliases.
*/
*/
function resolveEntityName(name: EntityNameOrEntityNameExpression, meaning: SymbolFlags, ignoreErrors?: boolean, dontResolveAlias?: boolean, location?: Node): Symbol | undefined {
if (nodeIsMissing(name)) {
return undefined;

View File

@ -1370,7 +1370,7 @@ namespace ts {
const missingMembers = getMissingInterfaceMembers(<InterfaceDeclaration>type.symbol.declarations[0], existingMembers, checker);
for (const member of missingMembers) {
if (member.kind === SyntaxKind.PropertySignature) {
if (member.kind === SyntaxKind.PropertySignature || member.kind === SyntaxKind.PropertyDeclaration) {
const interfaceProperty = <PropertySignature>member;
if (trackingAddedMembers.indexOf(interfaceProperty.name.getText()) === -1) {
let propertyText = "";
@ -1405,25 +1405,24 @@ namespace ts {
* Gets members in an interface and all its base types.
*/
function getInterfaceMembers(declaration: InterfaceDeclaration, checker: TypeChecker): TypeElement[] {
let result: TypeElement[] = declaration.members
? declaration.members.filter(member => !(getModifierFlags(member) & ModifierFlags.Private))
: [];
const clauses = getInterfaceBaseTypeNodes(declaration);
let result: TypeElement[] = [];
for (let i = 0; clauses && i < clauses.length; i++) {
const type = checker.getTypeAtLocation(clauses[i]);
if (type && type.symbol && type.symbol.declarations) {
result = result.concat(getInterfaceMembers(<InterfaceDeclaration>type.symbol.declarations[0], checker));
if (clauses) {
for (const clause of clauses) {
const type = checker.getTypeAtLocation(clause);
if (type && type.symbol && type.symbol.declarations) {
result = result.concat(getInterfaceMembers(<InterfaceDeclaration>type.symbol.declarations[0], checker));
}
}
}
if (declaration.members) {
result = result.concat(declaration.members);
}
return result;
}
function getMissingInterfaceMembers(declaration: InterfaceDeclaration, existingMembers: string[], checker: TypeChecker): TypeElement[] {
const interfaceMembers = getInterfaceMembers(declaration, checker);
return ts.filter(interfaceMembers, member => !member.name || existingMembers.indexOf(member.name.getText()) === -1);
}

View File

@ -7,5 +7,6 @@
//// class C extends A {[|
//// |]}
verify.codeFixAtPosition(`x: number;
verify.codeFixAtPosition(`
abstract x: number;
`);

View File

@ -7,5 +7,6 @@
//// class C extends A {[|
//// |]}
verify.codeFixAtPosition(`protected x: number;
verify.codeFixAtPosition(`
protected abstract x: number;
`);

View File

@ -7,5 +7,6 @@
//// class C extends A {[|
//// |]}
verify.codeFixAtPosition(`public x: number;
verify.codeFixAtPosition(`
public abstract x: number;
`);

View File

@ -53,10 +53,11 @@
verify.codeFixAtPosition(
`a: number;
b: number;
c: number;
d: number;
e: number:
`
e: number;
f: number;
a: number;
b: number;
d: number;
c: number;
`);