diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8d9311a087d26..fcf5c3854c960 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -43138,6 +43138,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // NOTE: assignability is checked in checkClassDeclaration const baseProperties = getPropertiesOfType(baseType); + let inheritedAbstractMemberNotImplementedError: Diagnostic | undefined; basePropertyCheck: for (const baseProperty of baseProperties) { const base = getTargetSymbol(baseProperty); @@ -43176,13 +43177,28 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } } + if (!inheritedAbstractMemberNotImplementedError) { + inheritedAbstractMemberNotImplementedError = error( + derivedClassDecl, + Diagnostics.Non_abstract_class_0_does_not_implement_all_abstract_members_of_1, + typeToString(type), typeToString(baseType)); + + } if (derivedClassDecl.kind === SyntaxKind.ClassExpression) { - error(derivedClassDecl, Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, - symbolToString(baseProperty), typeToString(baseType)); + addRelatedInfo( + inheritedAbstractMemberNotImplementedError, + createDiagnosticForNode( + baseProperty.valueDeclaration ?? (baseProperty.declarations && first(baseProperty.declarations)) ?? derivedClassDecl, + Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, + symbolToString(baseProperty), typeToString(baseType))); } else { - error(derivedClassDecl, Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, - typeToString(type), symbolToString(baseProperty), typeToString(baseType)); + addRelatedInfo( + inheritedAbstractMemberNotImplementedError, + createDiagnosticForNode( + baseProperty.valueDeclaration ?? (baseProperty.declarations && first(baseProperty.declarations)) ?? derivedClassDecl, + Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, + typeToString(type), symbolToString(baseProperty), typeToString(baseType))); } } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7ceffb97001ab..6ca4ec9e0941a 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -7760,5 +7760,9 @@ "Compiler option '{0}' cannot be given an empty string.": { "category": "Error", "code": 18051 + }, + "Non-abstract class '{0}' does not implement all abstract members of '{1}'": { + "category": "Error", + "code": 18052 } } diff --git a/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts b/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts index ac9d7af09944d..80649e31bc5dd 100644 --- a/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts +++ b/src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts @@ -26,8 +26,7 @@ import { } from "../_namespaces/ts.codefix"; const errorCodes = [ - Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code, - Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code, + Diagnostics.Non_abstract_class_0_does_not_implement_all_abstract_members_of_1.code, ]; const fixId = "fixClassDoesntImplementInheritedAbstractMember"; registerCodeFix({ diff --git a/tests/baselines/reference/abstractPropertyNegative.errors.txt b/tests/baselines/reference/abstractPropertyNegative.errors.txt index 70e4c825dd0d1..dab4d317d6712 100644 --- a/tests/baselines/reference/abstractPropertyNegative.errors.txt +++ b/tests/baselines/reference/abstractPropertyNegative.errors.txt @@ -1,8 +1,5 @@ tests/cases/compiler/abstractPropertyNegative.ts(10,18): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type -tests/cases/compiler/abstractPropertyNegative.ts(13,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'm' from class 'B'. -tests/cases/compiler/abstractPropertyNegative.ts(13,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'mismatch' from class 'B'. -tests/cases/compiler/abstractPropertyNegative.ts(13,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'prop' from class 'B'. -tests/cases/compiler/abstractPropertyNegative.ts(13,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'readonlyProp' from class 'B'. +tests/cases/compiler/abstractPropertyNegative.ts(13,7): error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' tests/cases/compiler/abstractPropertyNegative.ts(15,5): error TS1253: Abstract properties can only appear within an abstract class. tests/cases/compiler/abstractPropertyNegative.ts(16,37): error TS1005: '{' expected. tests/cases/compiler/abstractPropertyNegative.ts(19,3): error TS2540: Cannot assign to 'ro' because it is a read-only property. @@ -18,7 +15,7 @@ tests/cases/compiler/abstractPropertyNegative.ts(40,9): error TS2676: Accessors tests/cases/compiler/abstractPropertyNegative.ts(41,18): error TS2676: Accessors must both be abstract or non-abstract. -==== tests/cases/compiler/abstractPropertyNegative.ts (15 errors) ==== +==== tests/cases/compiler/abstractPropertyNegative.ts (12 errors) ==== interface A { prop: string; m(): string; @@ -35,13 +32,11 @@ tests/cases/compiler/abstractPropertyNegative.ts(41,18): error TS2676: Accessors } class C extends B { ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'm' from class 'B'. - ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'mismatch' from class 'B'. - ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'prop' from class 'B'. - ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'readonlyProp' from class 'B'. +!!! error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' +!!! related TS2515 tests/cases/compiler/abstractPropertyNegative.ts:6:14: Non-abstract class 'C' does not implement inherited abstract member 'prop' from class 'B'. +!!! related TS2515 tests/cases/compiler/abstractPropertyNegative.ts:8:18: Non-abstract class 'C' does not implement inherited abstract member 'readonlyProp' from class 'B'. +!!! related TS2515 tests/cases/compiler/abstractPropertyNegative.ts:9:14: Non-abstract class 'C' does not implement inherited abstract member 'm' from class 'B'. +!!! related TS2515 tests/cases/compiler/abstractPropertyNegative.ts:10:18: Non-abstract class 'C' does not implement inherited abstract member 'mismatch' from class 'B'. readonly ro = "readonly please"; abstract notAllowed: string; ~~~~~~~~ diff --git a/tests/baselines/reference/classAbstractDeclarations.d.errors.txt b/tests/baselines/reference/classAbstractDeclarations.d.errors.txt index d71f53118af7f..2beaa71420a9a 100644 --- a/tests/baselines/reference/classAbstractDeclarations.d.errors.txt +++ b/tests/baselines/reference/classAbstractDeclarations.d.errors.txt @@ -1,8 +1,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(2,5): error TS1242: 'abstract' modifier can only appear on a class, method, or property declaration. tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(2,28): error TS1183: An implementation cannot be declared in ambient contexts. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(11,15): error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(13,15): error TS2515: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(17,15): error TS2515: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(11,15): error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'AA' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(13,15): error TS18052: Non-abstract class 'DD' does not implement all abstract members of 'BB' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts(17,15): error TS18052: Non-abstract class 'FF' does not implement all abstract members of 'CC' ==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts (5 errors) ==== @@ -22,17 +22,20 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst declare class CC extends AA {} ~~ -!!! error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. +!!! error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'AA' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts:6:14: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. declare class DD extends BB {} ~~ -!!! error TS2515: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. +!!! error TS18052: Non-abstract class 'DD' does not implement all abstract members of 'BB' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts:6:14: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. declare abstract class EE extends BB {} declare class FF extends CC {} ~~ -!!! error TS2515: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. +!!! error TS18052: Non-abstract class 'FF' does not implement all abstract members of 'CC' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractDeclarations.d.ts:6:14: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. declare abstract class GG extends CC {} diff --git a/tests/baselines/reference/classAbstractExtends.errors.txt b/tests/baselines/reference/classAbstractExtends.errors.txt index 60b0f9ae0ac42..61920461206e9 100644 --- a/tests/baselines/reference/classAbstractExtends.errors.txt +++ b/tests/baselines/reference/classAbstractExtends.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractExtends.ts(9,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractExtends.ts(9,7): error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' ==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractExtends.ts (1 errors) ==== @@ -12,7 +12,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class C extends B { } ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. +!!! error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractExtends.ts:6:14: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. abstract class D extends B {} diff --git a/tests/baselines/reference/classAbstractGeneric.errors.txt b/tests/baselines/reference/classAbstractGeneric.errors.txt index fb5a4c32a39d1..655b13096f8a2 100644 --- a/tests/baselines/reference/classAbstractGeneric.errors.txt +++ b/tests/baselines/reference/classAbstractGeneric.errors.txt @@ -1,12 +1,10 @@ -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(10,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(10,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'foo' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(12,7): error TS2515: Non-abstract class 'D' does not implement inherited abstract member 'bar' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(12,7): error TS2515: Non-abstract class 'D' does not implement inherited abstract member 'foo' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(14,7): error TS2515: Non-abstract class 'E' does not implement inherited abstract member 'bar' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(18,7): error TS2515: Non-abstract class 'F' does not implement inherited abstract member 'foo' from class 'A'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(10,7): error TS18052: Non-abstract class 'C' does not implement all abstract members of 'A' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(12,7): error TS18052: Non-abstract class 'D' does not implement all abstract members of 'A' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(14,7): error TS18052: Non-abstract class 'E' does not implement all abstract members of 'A' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts(18,7): error TS18052: Non-abstract class 'F' does not implement all abstract members of 'A' -==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts (6 errors) ==== +==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts (4 errors) ==== abstract class A { t: T; @@ -18,25 +16,27 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class C extends A {} // error -- inherits abstract methods ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'A'. - ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'foo' from class 'A'. +!!! error TS18052: Non-abstract class 'C' does not implement all abstract members of 'A' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:4:14: Non-abstract class 'C' does not implement inherited abstract member 'foo' from class 'A'. +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:5:14: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'A'. class D extends A {} // error -- inherits abstract methods ~ -!!! error TS2515: Non-abstract class 'D' does not implement inherited abstract member 'bar' from class 'A'. - ~ -!!! error TS2515: Non-abstract class 'D' does not implement inherited abstract member 'foo' from class 'A'. +!!! error TS18052: Non-abstract class 'D' does not implement all abstract members of 'A' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:4:14: Non-abstract class 'D' does not implement inherited abstract member 'foo' from class 'A'. +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:5:14: Non-abstract class 'D' does not implement inherited abstract member 'bar' from class 'A'. class E extends A { // error -- doesn't implement bar ~ -!!! error TS2515: Non-abstract class 'E' does not implement inherited abstract member 'bar' from class 'A'. +!!! error TS18052: Non-abstract class 'E' does not implement all abstract members of 'A' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:5:14: Non-abstract class 'E' does not implement inherited abstract member 'bar' from class 'A'. foo() { return this.t; } } class F extends A { // error -- doesn't implement foo ~ -!!! error TS2515: Non-abstract class 'F' does not implement inherited abstract member 'foo' from class 'A'. +!!! error TS18052: Non-abstract class 'F' does not implement all abstract members of 'A' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractGeneric.ts:4:14: Non-abstract class 'F' does not implement inherited abstract member 'foo' from class 'A'. bar(t : T) {} } diff --git a/tests/baselines/reference/classAbstractInheritance.errors.txt b/tests/baselines/reference/classAbstractInheritance.errors.txt index 3e1062044150d..853f8ad6d2798 100644 --- a/tests/baselines/reference/classAbstractInheritance.errors.txt +++ b/tests/baselines/reference/classAbstractInheritance.errors.txt @@ -1,6 +1,6 @@ -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(13,7): error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(15,7): error TS2515: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(19,7): error TS2515: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(13,7): error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'AA' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(15,7): error TS18052: Non-abstract class 'DD' does not implement all abstract members of 'BB' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts(19,7): error TS18052: Non-abstract class 'FF' does not implement all abstract members of 'CC' ==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts (3 errors) ==== @@ -18,16 +18,19 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class CC extends AA {} ~~ -!!! error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. +!!! error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'AA' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts:8:14: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'AA'. class DD extends BB {} ~~ -!!! error TS2515: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. +!!! error TS18052: Non-abstract class 'DD' does not implement all abstract members of 'BB' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts:8:14: Non-abstract class 'DD' does not implement inherited abstract member 'foo' from class 'BB'. abstract class EE extends BB {} class FF extends CC {} ~~ -!!! error TS2515: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. +!!! error TS18052: Non-abstract class 'FF' does not implement all abstract members of 'CC' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInheritance.ts:8:14: Non-abstract class 'FF' does not implement inherited abstract member 'foo' from class 'CC'. abstract class GG extends CC {} \ No newline at end of file diff --git a/tests/baselines/reference/classAbstractInstantiations2.errors.txt b/tests/baselines/reference/classAbstractInstantiations2.errors.txt index 3d1cb33d483f7..0347025c3c21e 100644 --- a/tests/baselines/reference/classAbstractInstantiations2.errors.txt +++ b/tests/baselines/reference/classAbstractInstantiations2.errors.txt @@ -4,7 +4,7 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(17,5): error TS2511: Cannot create an instance of an abstract class. tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(21,1): error TS2511: Cannot create an instance of an abstract class. tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(23,15): error TS2449: Class 'C' used before its declaration. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(26,7): error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(26,7): error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(46,5): error TS2391: Function implementation is missing or not immediately following the declaration. tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(46,5): error TS2512: Overload signatures must all be abstract or non-abstract. tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts(50,5): error TS1244: Abstract methods can only appear within an abstract class. @@ -50,7 +50,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class C extends B { } // error -- not declared abstract ~ -!!! error TS2515: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. +!!! error TS18052: Non-abstract class 'C' does not implement all abstract members of 'B' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractInstantiations2.ts:7:14: Non-abstract class 'C' does not implement inherited abstract member 'bar' from class 'B'. abstract class D extends B { } // okay diff --git a/tests/baselines/reference/classAbstractOverrideWithAbstract.errors.txt b/tests/baselines/reference/classAbstractOverrideWithAbstract.errors.txt index d9d073a07e0ec..ff8c32e2e290b 100644 --- a/tests/baselines/reference/classAbstractOverrideWithAbstract.errors.txt +++ b/tests/baselines/reference/classAbstractOverrideWithAbstract.errors.txt @@ -1,4 +1,4 @@ -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverrideWithAbstract.ts(19,7): error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'BB'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverrideWithAbstract.ts(19,7): error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'BB' ==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverrideWithAbstract.ts (1 errors) ==== @@ -22,7 +22,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class CC extends BB {} // error ~~ -!!! error TS2515: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'BB'. +!!! error TS18052: Non-abstract class 'CC' does not implement all abstract members of 'BB' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractOverrideWithAbstract.ts:15:14: Non-abstract class 'CC' does not implement inherited abstract member 'foo' from class 'BB'. class DD extends BB { foo() {} diff --git a/tests/baselines/reference/classAbstractUsingAbstractMethods2.errors.txt b/tests/baselines/reference/classAbstractUsingAbstractMethods2.errors.txt index e01b233a4c1c0..677fc42742fc2 100644 --- a/tests/baselines/reference/classAbstractUsingAbstractMethods2.errors.txt +++ b/tests/baselines/reference/classAbstractUsingAbstractMethods2.errors.txt @@ -1,6 +1,6 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts(2,5): error TS1244: Abstract methods can only appear within an abstract class. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts(5,7): error TS2515: Non-abstract class 'B' does not implement inherited abstract member 'foo' from class 'A'. -tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts(21,7): error TS2515: Non-abstract class 'BB' does not implement inherited abstract member 'foo' from class 'AA'. +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts(5,7): error TS18052: Non-abstract class 'B' does not implement all abstract members of 'A' +tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts(21,7): error TS18052: Non-abstract class 'BB' does not implement all abstract members of 'AA' ==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts (3 errors) ==== @@ -12,7 +12,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class B extends A {} ~ -!!! error TS2515: Non-abstract class 'B' does not implement inherited abstract member 'foo' from class 'A'. +!!! error TS18052: Non-abstract class 'B' does not implement all abstract members of 'A' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts:2:14: Non-abstract class 'B' does not implement inherited abstract member 'foo' from class 'A'. abstract class C extends A {} @@ -30,7 +31,8 @@ tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbst class BB extends AA {} ~~ -!!! error TS2515: Non-abstract class 'BB' does not implement inherited abstract member 'foo' from class 'AA'. +!!! error TS18052: Non-abstract class 'BB' does not implement all abstract members of 'AA' +!!! related TS2515 tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractUsingAbstractMethods2.ts:18:14: Non-abstract class 'BB' does not implement inherited abstract member 'foo' from class 'AA'. abstract class CC extends AA {} diff --git a/tests/baselines/reference/classExpressionExtendingAbstractClass.errors.txt b/tests/baselines/reference/classExpressionExtendingAbstractClass.errors.txt index b5d709fbf6069..6388e7c613570 100644 --- a/tests/baselines/reference/classExpressionExtendingAbstractClass.errors.txt +++ b/tests/baselines/reference/classExpressionExtendingAbstractClass.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/classExpressionExtendingAbstractClass.ts(5,9): error TS2653: Non-abstract class expression does not implement inherited abstract member 'foo' from class 'A'. +tests/cases/compiler/classExpressionExtendingAbstractClass.ts(5,9): error TS18052: Non-abstract class 'C' does not implement all abstract members of 'A' ==== tests/cases/compiler/classExpressionExtendingAbstractClass.ts (1 errors) ==== @@ -8,7 +8,8 @@ tests/cases/compiler/classExpressionExtendingAbstractClass.ts(5,9): error TS2653 var C = class extends A { // no error reported! ~~~~~ -!!! error TS2653: Non-abstract class expression does not implement inherited abstract member 'foo' from class 'A'. +!!! error TS18052: Non-abstract class 'C' does not implement all abstract members of 'A' +!!! related TS2653 tests/cases/compiler/classExpressionExtendingAbstractClass.ts:2:14: Non-abstract class expression does not implement inherited abstract member 'foo' from class 'A'. }; \ No newline at end of file diff --git a/tests/baselines/reference/mixinAbstractClasses.2.errors.txt b/tests/baselines/reference/mixinAbstractClasses.2.errors.txt index 99a92c854628c..8f4a29462113c 100644 --- a/tests/baselines/reference/mixinAbstractClasses.2.errors.txt +++ b/tests/baselines/reference/mixinAbstractClasses.2.errors.txt @@ -1,5 +1,5 @@ tests/cases/conformance/classes/mixinAbstractClasses.2.ts(7,11): error TS2797: A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'. -tests/cases/conformance/classes/mixinAbstractClasses.2.ts(21,7): error TS2515: Non-abstract class 'DerivedFromAbstract' does not implement inherited abstract member 'abstractBaseMethod' from class 'AbstractBase & Mixin'. +tests/cases/conformance/classes/mixinAbstractClasses.2.ts(21,7): error TS18052: Non-abstract class 'DerivedFromAbstract' does not implement all abstract members of 'AbstractBase & Mixin' tests/cases/conformance/classes/mixinAbstractClasses.2.ts(25,1): error TS2511: Cannot create an instance of an abstract class. @@ -28,7 +28,8 @@ tests/cases/conformance/classes/mixinAbstractClasses.2.ts(25,1): error TS2511: C // error expected: Non-abstract class 'DerivedFromAbstract' does not implement inherited abstract member 'abstractBaseMethod' from class 'AbstractBase & Mixin'. class DerivedFromAbstract extends MixedBase { ~~~~~~~~~~~~~~~~~~~ -!!! error TS2515: Non-abstract class 'DerivedFromAbstract' does not implement inherited abstract member 'abstractBaseMethod' from class 'AbstractBase & Mixin'. +!!! error TS18052: Non-abstract class 'DerivedFromAbstract' does not implement all abstract members of 'AbstractBase & Mixin' +!!! related TS2515 tests/cases/conformance/classes/mixinAbstractClasses.2.ts:15:14: Non-abstract class 'DerivedFromAbstract' does not implement inherited abstract member 'abstractBaseMethod' from class 'AbstractBase & Mixin'. } // error expected: Cannot create an instance of an abstract class.