Skip to content

Commit 56cad36

Browse files
a-tarasyukDanielRosenwasser
authored andcommitted
(34894): Wrong information in error message for overridden acc… (microsoft#34901)
1 parent be960fa commit 56cad36

12 files changed

+37
-33
lines changed

src/compiler/checker.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31832,11 +31832,14 @@ namespace ts {
3183231832
// same when the derived property is from an assignment
3183331833
continue;
3183431834
}
31835-
if (basePropertyFlags !== SymbolFlags.Property && derivedPropertyFlags === SymbolFlags.Property) {
31836-
errorMessage = Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_property;
31837-
}
31838-
else if (basePropertyFlags === SymbolFlags.Property && derivedPropertyFlags !== SymbolFlags.Property) {
31839-
errorMessage = Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_accessor;
31835+
31836+
const overriddenInstanceProperty = basePropertyFlags !== SymbolFlags.Property && derivedPropertyFlags === SymbolFlags.Property;
31837+
const overriddenInstanceAccessor = basePropertyFlags === SymbolFlags.Property && derivedPropertyFlags !== SymbolFlags.Property;
31838+
if (overriddenInstanceProperty || overriddenInstanceAccessor) {
31839+
const errorMessage = overriddenInstanceProperty ?
31840+
Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property :
31841+
Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor;
31842+
error(getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage, symbolToString(base), typeToString(baseType), typeToString(type));
3184031843
}
3184131844
else {
3184231845
const uninitialized = find(derived.declarations, d => d.kind === SyntaxKind.PropertyDeclaration && !(d as PropertyDeclaration).initializer);
@@ -31856,9 +31859,10 @@ namespace ts {
3185631859
error(getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage, symbolToString(base), typeToString(baseType));
3185731860
}
3185831861
}
31859-
// correct case
31860-
continue;
3186131862
}
31863+
31864+
// correct case
31865+
continue;
3186231866
}
3186331867
else if (isPrototypeProperty(base)) {
3186431868
if (isPrototypeProperty(derived) || derived.flags & SymbolFlags.Property) {

src/compiler/diagnosticMessages.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,11 +2241,11 @@
22412241
"category": "Error",
22422242
"code": 2609
22432243
},
2244-
"Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member property.": {
2244+
"'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property.": {
22452245
"category": "Error",
22462246
"code": 2610
22472247
},
2248-
"Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member accessor.": {
2248+
"'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor.": {
22492249
"category": "Error",
22502250
"code": 2611
22512251
},
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty.ts(5,9): error TS2611: Class 'A' defines instance member property 'p', but extended class 'B' defines it as instance member accessor.
2-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty.ts(12,9): error TS2611: Class 'C' defines instance member property 'p', but extended class 'D' defines it as instance member accessor.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty.ts(5,9): error TS2611: 'p' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
2+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty.ts(12,9): error TS2611: 'p' is defined as a property in class 'C', but is overridden here in 'D' as an accessor.
33

44

55
==== tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty.ts (2 errors) ====
@@ -9,7 +9,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
99
class B extends A {
1010
get p() { return 'oh no' } // error
1111
~
12-
!!! error TS2611: Class 'A' defines instance member property 'p', but extended class 'B' defines it as instance member accessor.
12+
!!! error TS2611: 'p' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
1313
}
1414
class C {
1515
p = 101
@@ -18,7 +18,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
1818
_secret = 11
1919
get p() { return this._secret } // error
2020
~
21-
!!! error TS2611: Class 'C' defines instance member property 'p', but extended class 'D' defines it as instance member accessor.
21+
!!! error TS2611: 'p' is defined as a property in class 'C', but is overridden here in 'D' as an accessor.
2222
set p(value) { this._secret = value } // error
2323
}
2424

tests/baselines/reference/accessorsOverrideProperty2.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts(6,7): error TS2611: Class 'Base' defines instance member property 'x', but extended class 'Derived' defines it as instance member accessor.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts(6,7): error TS2611: 'x' is defined as a property in class 'Base', but is overridden here in 'Derived' as an accessor.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty2.ts (1 errors) ====
@@ -9,7 +9,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
99
class Derived extends Base {
1010
get x() { return 2; } // should be an error
1111
~
12-
!!! error TS2611: Class 'Base' defines instance member property 'x', but extended class 'Derived' defines it as instance member accessor.
12+
!!! error TS2611: 'x' is defined as a property in class 'Base', but is overridden here in 'Derived' as an accessor.
1313
set x(value) { console.log(`x was set to ${value}`); }
1414
}
1515

tests/baselines/reference/accessorsOverrideProperty3.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty3.ts(6,9): error TS2611: Class 'Animal' defines instance member property 'sound', but extended class 'Lion' defines it as instance member accessor.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty3.ts(6,9): error TS2611: 'sound' is defined as a property in class 'Animal', but is overridden here in 'Lion' as an accessor.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty3.ts (1 errors) ====
@@ -9,7 +9,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
99
_sound = 'grrr'
1010
get sound() { return this._sound } // error here
1111
~~~~~
12-
!!! error TS2611: Class 'Animal' defines instance member property 'sound', but extended class 'Lion' defines it as instance member accessor.
12+
!!! error TS2611: 'sound' is defined as a property in class 'Animal', but is overridden here in 'Lion' as an accessor.
1313
set sound(val) { this._sound = val }
1414
}
1515

tests/baselines/reference/accessorsOverrideProperty4.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty4.ts(6,9): error TS2611: Class 'Animal' defines instance member property 'sound', but extended class 'Lion' defines it as instance member accessor.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty4.ts(6,9): error TS2611: 'sound' is defined as a property in class 'Animal', but is overridden here in 'Lion' as an accessor.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty4.ts (1 errors) ====
@@ -9,7 +9,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
99
_sound = 'roar'
1010
get sound(): string { return this._sound }
1111
~~~~~
12-
!!! error TS2611: Class 'Animal' defines instance member property 'sound', but extended class 'Lion' defines it as instance member accessor.
12+
!!! error TS2611: 'sound' is defined as a property in class 'Animal', but is overridden here in 'Lion' as an accessor.
1313
set sound(val: string) { this._sound = val }
1414
}
1515

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty7.ts(5,9): error TS2611: Class 'A' defines instance member property 'p', but extended class 'B' defines it as instance member accessor.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty7.ts(5,9): error TS2611: 'p' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProperty7.ts (1 errors) ====
@@ -8,6 +8,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/accessorsOverrideProp
88
class B extends A {
99
get p() { return 'oh no' } // error
1010
~
11-
!!! error TS2611: Class 'A' defines instance member property 'p', but extended class 'B' defines it as instance member accessor.
11+
!!! error TS2611: 'p' is defined as a property in class 'A', but is overridden here in 'B' as an accessor.
1212
}
1313

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors.ts(5,5): error TS2610: Class 'A' defines instance member accessor 'p', but extended class 'B' defines it as instance member property.
2-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors.ts(13,5): error TS2610: Class 'C' defines instance member accessor 'p', but extended class 'D' defines it as instance member property.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors.ts(5,5): error TS2610: 'p' is defined as an accessor in class 'A', but is overridden here in 'B' as an instance property.
2+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors.ts(13,5): error TS2610: 'p' is defined as an accessor in class 'C', but is overridden here in 'D' as an instance property.
33

44

55
==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors.ts (2 errors) ====
@@ -9,7 +9,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
99
class B extends A {
1010
p = 'yep' // error
1111
~
12-
!!! error TS2610: Class 'A' defines instance member accessor 'p', but extended class 'B' defines it as instance member property.
12+
!!! error TS2610: 'p' is defined as an accessor in class 'A', but is overridden here in 'B' as an instance property.
1313
}
1414
class C {
1515
_secret = 11
@@ -19,6 +19,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
1919
class D extends C {
2020
p = 101 // error
2121
~
22-
!!! error TS2610: Class 'C' defines instance member accessor 'p', but extended class 'D' defines it as instance member property.
22+
!!! error TS2610: 'p' is defined as an accessor in class 'C', but is overridden here in 'D' as an instance property.
2323
}
2424

tests/baselines/reference/propertyOverridesAccessors2.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors2.ts(7,3): error TS2610: Class 'Base' defines instance member accessor 'x', but extended class 'Derived' defines it as instance member property.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors2.ts(7,3): error TS2610: 'x' is defined as an accessor in class 'Base', but is overridden here in 'Derived' as an instance property.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors2.ts (1 errors) ====
@@ -10,7 +10,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
1010
class Derived extends Base {
1111
x = 1;
1212
~
13-
!!! error TS2610: Class 'Base' defines instance member accessor 'x', but extended class 'Derived' defines it as instance member property.
13+
!!! error TS2610: 'x' is defined as an accessor in class 'Base', but is overridden here in 'Derived' as an instance property.
1414
}
1515

1616
const obj = new Derived(); // prints 'x was set to 1'

tests/baselines/reference/propertyOverridesAccessors3.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors3.ts(19,5): error TS2610: Class 'Animal' defines instance member accessor 'sound', but extended class 'Lion' defines it as instance member property.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors3.ts(19,5): error TS2610: 'sound' is defined as an accessor in class 'Animal', but is overridden here in 'Lion' as an instance property.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors3.ts (1 errors) ====
@@ -22,7 +22,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
2222
class Lion extends Animal {
2323
sound = 'RAWR!' // error here
2424
~~~~~
25-
!!! error TS2610: Class 'Animal' defines instance member accessor 'sound', but extended class 'Lion' defines it as instance member property.
25+
!!! error TS2610: 'sound' is defined as an accessor in class 'Animal', but is overridden here in 'Lion' as an instance property.
2626
}
2727

2828
const lion = new Lion

tests/baselines/reference/propertyOverridesAccessors4.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors4.ts(6,5): error TS2610: Class 'Animal' defines instance member accessor 'sound', but extended class 'Lion' defines it as instance member property.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors4.ts(6,5): error TS2610: 'sound' is defined as an accessor in class 'Animal', but is overridden here in 'Lion' as an instance property.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors4.ts (1 errors) ====
@@ -9,6 +9,6 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
99
class Lion extends Animal {
1010
sound = 'RAWR!' // error here
1111
~~~~~
12-
!!! error TS2610: Class 'Animal' defines instance member accessor 'sound', but extended class 'Lion' defines it as instance member property.
12+
!!! error TS2610: 'sound' is defined as an accessor in class 'Animal', but is overridden here in 'Lion' as an instance property.
1313
}
1414

tests/baselines/reference/propertyOverridesAccessors5.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors5.ts(5,24): error TS2610: Class 'A' defines instance member accessor 'p', but extended class 'B' defines it as instance member property.
1+
tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors5.ts(5,24): error TS2610: 'p' is defined as an accessor in class 'A', but is overridden here in 'B' as an instance property.
22

33

44
==== tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAccessors5.ts (1 errors) ====
@@ -8,7 +8,7 @@ tests/cases/conformance/classes/propertyMemberDeclarations/propertyOverridesAcce
88
class B extends A {
99
constructor(public p: string) {
1010
~
11-
!!! error TS2610: Class 'A' defines instance member accessor 'p', but extended class 'B' defines it as instance member property.
11+
!!! error TS2610: 'p' is defined as an accessor in class 'A', but is overridden here in 'B' as an instance property.
1212
super()
1313
}
1414
}

0 commit comments

Comments
 (0)