(node)
| 80251 | } |
| 80252 | } |
| 80253 | function checkClassForDuplicateDeclarations(node) { |
| 80254 | var instanceNames = new ts.Map(); |
| 80255 | var staticNames = new ts.Map(); |
| 80256 | // instance and static private identifiers share the same scope |
| 80257 | var privateIdentifiers = new ts.Map(); |
| 80258 | for (var _i = 0, _a = node.members; _i < _a.length; _i++) { |
| 80259 | var member = _a[_i]; |
| 80260 | if (member.kind === 171 /* SyntaxKind.Constructor */) { |
| 80261 | for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) { |
| 80262 | var param = _c[_b]; |
| 80263 | if (ts.isParameterPropertyDeclaration(param, member) && !ts.isBindingPattern(param.name)) { |
| 80264 | addName(instanceNames, param.name, param.name.escapedText, 3 /* DeclarationMeaning.GetOrSetAccessor */); |
| 80265 | } |
| 80266 | } |
| 80267 | } |
| 80268 | else { |
| 80269 | var isStaticMember = ts.isStatic(member); |
| 80270 | var name = member.name; |
| 80271 | if (!name) { |
| 80272 | continue; |
| 80273 | } |
| 80274 | var isPrivate = ts.isPrivateIdentifier(name); |
| 80275 | var privateStaticFlags = isPrivate && isStaticMember ? 16 /* DeclarationMeaning.PrivateStatic */ : 0; |
| 80276 | var names = isPrivate ? privateIdentifiers : |
| 80277 | isStaticMember ? staticNames : |
| 80278 | instanceNames; |
| 80279 | var memberName = name && ts.getPropertyNameForPropertyNameNode(name); |
| 80280 | if (memberName) { |
| 80281 | switch (member.kind) { |
| 80282 | case 172 /* SyntaxKind.GetAccessor */: |
| 80283 | addName(names, name, memberName, 1 /* DeclarationMeaning.GetAccessor */ | privateStaticFlags); |
| 80284 | break; |
| 80285 | case 173 /* SyntaxKind.SetAccessor */: |
| 80286 | addName(names, name, memberName, 2 /* DeclarationMeaning.SetAccessor */ | privateStaticFlags); |
| 80287 | break; |
| 80288 | case 167 /* SyntaxKind.PropertyDeclaration */: |
| 80289 | addName(names, name, memberName, 3 /* DeclarationMeaning.GetOrSetAccessor */ | privateStaticFlags); |
| 80290 | break; |
| 80291 | case 169 /* SyntaxKind.MethodDeclaration */: |
| 80292 | addName(names, name, memberName, 8 /* DeclarationMeaning.Method */ | privateStaticFlags); |
| 80293 | break; |
| 80294 | } |
| 80295 | } |
| 80296 | } |
| 80297 | } |
| 80298 | function addName(names, location, name, meaning) { |
| 80299 | var prev = names.get(name); |
| 80300 | if (prev) { |
| 80301 | // For private identifiers, do not allow mixing of static and instance members with the same name |
| 80302 | if ((prev & 16 /* DeclarationMeaning.PrivateStatic */) !== (meaning & 16 /* DeclarationMeaning.PrivateStatic */)) { |
| 80303 | error(location, ts.Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, ts.getTextOfNode(location)); |
| 80304 | } |
| 80305 | else { |
| 80306 | var prevIsMethod = !!(prev & 8 /* DeclarationMeaning.Method */); |
| 80307 | var isMethod = !!(meaning & 8 /* DeclarationMeaning.Method */); |
| 80308 | if (prevIsMethod || isMethod) { |
| 80309 | if (prevIsMethod !== isMethod) { |
| 80310 | error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location)); |
no test coverage detected