@@ -16034,27 +16034,27 @@ namespace ts {
1603416034 }
1603516035
1603616036 function markPropertyAsReferenced(prop: Symbol, nodeForCheckWriteOnly: Node | undefined, isThisAccess: boolean) {
16037- if (prop &&
16038- noUnusedIdentifiers &&
16039- (prop.flags & SymbolFlags.ClassMember) &&
16040- prop.valueDeclaration && hasModifier(prop.valueDeclaration, ModifierFlags.Private)
16041- && !(nodeForCheckWriteOnly && isWriteOnlyAccess(nodeForCheckWriteOnly))) {
16042-
16043- if (isThisAccess) {
16044- // Find any FunctionLikeDeclaration because those create a new 'this' binding. But this should only matter for methods (or getters/setters).
16045- const containingMethod = findAncestor(nodeForCheckWriteOnly, isFunctionLikeDeclaration);
16046- if (containingMethod && containingMethod.symbol === prop) {
16047- return;
16048- }
16049- }
16037+ if (!prop || !noUnusedIdentifiers || !(prop.flags & SymbolFlags.ClassMember) || !prop.valueDeclaration || !hasModifier(prop.valueDeclaration, ModifierFlags.Private)) {
16038+ return;
16039+ }
16040+ if (nodeForCheckWriteOnly && isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & SymbolFlags.SetAccessor && !(prop.flags & SymbolFlags.GetAccessor))) {
16041+ return;
16042+ }
1605016043
16051- if (getCheckFlags(prop) & CheckFlags.Instantiated ) {
16052- getSymbolLinks(prop).target.isReferenced = true;
16053- }
16054- else {
16055- prop.isReferenced = true ;
16044+ if (isThisAccess ) {
16045+ // Find any FunctionLikeDeclaration because those create a new 'this' binding. But this should only matter for methods (or getters/setters).
16046+ const containingMethod = findAncestor(nodeForCheckWriteOnly, isFunctionLikeDeclaration);
16047+ if (containingMethod && containingMethod.symbol === prop) {
16048+ return ;
1605616049 }
1605716050 }
16051+
16052+ if (getCheckFlags(prop) & CheckFlags.Instantiated) {
16053+ getSymbolLinks(prop).target.isReferenced = true;
16054+ }
16055+ else {
16056+ prop.isReferenced = true;
16057+ }
1605816058 }
1605916059
1606016060 function isValidPropertyAccess(node: PropertyAccessExpression | QualifiedName, propertyName: __String): boolean {
@@ -21222,17 +21222,31 @@ namespace ts {
2122221222 if (compilerOptions.noUnusedLocals && !(node.flags & NodeFlags.Ambient)) {
2122321223 if (node.members) {
2122421224 for (const member of node.members) {
21225- if (member.kind === SyntaxKind.MethodDeclaration || member.kind === SyntaxKind.PropertyDeclaration) {
21226- if (!member.symbol.isReferenced && hasModifier(member, ModifierFlags.Private)) {
21227- error(member.name, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolName(member.symbol));
21228- }
21229- }
21230- else if (member.kind === SyntaxKind.Constructor) {
21231- for (const parameter of (<ConstructorDeclaration>member).parameters) {
21232- if (!parameter.symbol.isReferenced && hasModifier(parameter, ModifierFlags.Private)) {
21233- error(parameter.name, Diagnostics.Property_0_is_declared_but_its_value_is_never_read, symbolName(parameter.symbol));
21225+ switch (member.kind) {
21226+ case SyntaxKind.MethodDeclaration:
21227+ case SyntaxKind.PropertyDeclaration:
21228+ case SyntaxKind.GetAccessor:
21229+ case SyntaxKind.SetAccessor:
21230+ if (member.kind === SyntaxKind.SetAccessor && member.symbol.flags & SymbolFlags.GetAccessor) {
21231+ // Already would have reported an error on the getter.
21232+ break;
2123421233 }
21235- }
21234+ if (!member.symbol.isReferenced && hasModifier(member, ModifierFlags.Private)) {
21235+ error(member.name, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolName(member.symbol));
21236+ }
21237+ break;
21238+ case SyntaxKind.Constructor:
21239+ for (const parameter of (<ConstructorDeclaration>member).parameters) {
21240+ if (!parameter.symbol.isReferenced && hasModifier(parameter, ModifierFlags.Private)) {
21241+ error(parameter.name, Diagnostics.Property_0_is_declared_but_its_value_is_never_read, symbolName(parameter.symbol));
21242+ }
21243+ }
21244+ break;
21245+ case SyntaxKind.IndexSignature:
21246+ // Can't be private
21247+ break;
21248+ default:
21249+ Debug.fail();
2123621250 }
2123721251 }
2123821252 }
0 commit comments