@@ -15780,19 +15780,20 @@ namespace ts {
15780
15780
}
15781
15781
15782
15782
function checkClassForDuplicateDeclarations(node: ClassLikeDeclaration) {
15783
- const enum Accessor {
15783
+ const enum Declaration {
15784
15784
Getter = 1,
15785
15785
Setter = 2,
15786
+ Method = 4,
15786
15787
Property = Getter | Setter
15787
15788
}
15788
15789
15789
- const instanceNames = createMap<Accessor >();
15790
- const staticNames = createMap<Accessor >();
15790
+ const instanceNames = createMap<Declaration >();
15791
+ const staticNames = createMap<Declaration >();
15791
15792
for (const member of node.members) {
15792
15793
if (member.kind === SyntaxKind.Constructor) {
15793
15794
for (const param of (member as ConstructorDeclaration).parameters) {
15794
15795
if (isParameterPropertyDeclaration(param)) {
15795
- addName(instanceNames, param.name, (param.name as Identifier).text, Accessor .Property);
15796
+ addName(instanceNames, param.name, (param.name as Identifier).text, Declaration .Property);
15796
15797
}
15797
15798
}
15798
15799
}
@@ -15804,25 +15805,34 @@ namespace ts {
15804
15805
if (memberName) {
15805
15806
switch (member.kind) {
15806
15807
case SyntaxKind.GetAccessor:
15807
- addName(names, member.name, memberName, Accessor .Getter);
15808
+ addName(names, member.name, memberName, Declaration .Getter);
15808
15809
break;
15809
15810
15810
15811
case SyntaxKind.SetAccessor:
15811
- addName(names, member.name, memberName, Accessor .Setter);
15812
+ addName(names, member.name, memberName, Declaration .Setter);
15812
15813
break;
15813
15814
15814
15815
case SyntaxKind.PropertyDeclaration:
15815
- addName(names, member.name, memberName, Accessor.Property);
15816
+ addName(names, member.name, memberName, Declaration.Property);
15817
+ break;
15818
+
15819
+ case SyntaxKind.MethodDeclaration:
15820
+ addName(names, member.name, memberName, Declaration.Method);
15816
15821
break;
15817
15822
}
15818
15823
}
15819
15824
}
15820
15825
}
15821
15826
15822
- function addName(names: Map<Accessor >, location: Node, name: string, meaning: Accessor ) {
15827
+ function addName(names: Map<Declaration >, location: Node, name: string, meaning: Declaration ) {
15823
15828
const prev = names.get(name);
15824
15829
if (prev) {
15825
- if (prev & meaning) {
15830
+ if (prev & Declaration.Method) {
15831
+ if (meaning !== Declaration.Method) {
15832
+ error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location));
15833
+ }
15834
+ }
15835
+ else if (prev & meaning) {
15826
15836
error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location));
15827
15837
}
15828
15838
else {
0 commit comments