diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9d5c65559333b..d7ca54162f057 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -25967,10 +25967,18 @@ namespace ts { */ function checkPropertyAccessibility( node: PropertyAccessExpression | QualifiedName | PropertyAccessExpression | VariableDeclaration | ParameterDeclaration | ImportTypeNode | PropertyAssignment | ShorthandPropertyAssignment | BindingElement, - isSuper: boolean, type: Type, prop: Symbol): boolean { - const flags = getDeclarationModifierFlagsFromSymbol(prop); + isSuper: boolean, type: Type, prop: Symbol, isWrite = false): boolean { + let flags = getDeclarationModifierFlagsFromSymbol(prop); const errorNode = node.kind === SyntaxKind.QualifiedName ? node.right : node.kind === SyntaxKind.ImportType ? node : node.name; + // Writes use the visibility modifier of the set accessor, if one is declared + if (isWrite) { + const setter = forEach(prop.declarations, p => p.kind === SyntaxKind.SetAccessor && p); + if (setter) { + flags = (flags & ~ModifierFlags.AccessibilityModifier) | getEffectiveDeclarationFlags(setter, ModifierFlags.AccessibilityModifier); + } + } + if (isSuper) { // TS 1.0 spec (April 2014): 4.8.2 // - In a constructor, instance member function, instance member accessor, or @@ -26285,7 +26293,7 @@ namespace ts { markAliasReferenced(parentSymbol, node); } - let propType: Type; + let propType: Type | undefined; if (!prop) { const indexInfo = !isPrivateIdentifier(right) && (assignmentKind === AssignmentKind.None || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getIndexInfoOfType(apparentType, IndexKind.String) : undefined; if (!(indexInfo && indexInfo.type)) { @@ -26316,19 +26324,30 @@ namespace ts { } } else { + const isWrite = isWriteAccess(node); if (getDeclarationNodeFlagsFromSymbol(prop) & NodeFlags.Deprecated && isUncalledFunctionReference(node, prop)) { errorOrSuggestion(/* isError */ false, right, Diagnostics._0_is_deprecated, right.escapedText as string); } checkPropertyNotUsedBeforeDeclaration(prop, node, right); markPropertyAsReferenced(prop, node, left.kind === SyntaxKind.ThisKeyword); getNodeLinks(node).resolvedSymbol = prop; - checkPropertyAccessibility(node, left.kind === SyntaxKind.SuperKeyword, apparentType, prop); + checkPropertyAccessibility(node, left.kind === SyntaxKind.SuperKeyword, apparentType, prop, isWrite); if (isAssignmentToReadonlyEntity(node as Expression, prop, assignmentKind)) { error(right, Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, idText(right)); return errorType; } - propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : getConstraintForLocation(getTypeOfSymbol(prop), node); + if (isWrite) { + const setter = forEach(prop.declarations, p => (p.kind === SyntaxKind.SetAccessor && p)); + if (setter) { + propType = getAnnotatedAccessorType(setter as SetAccessorDeclaration); + } + } + + if (propType === undefined) { + propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : getConstraintForLocation(getTypeOfSymbol(prop), node); + } } + // For writes to properties declared as accessors, use the 'set' type return getFlowTypeOfAccessExpression(node, prop, propType, right); } @@ -32321,15 +32340,19 @@ namespace ts { const otherKind = node.kind === SyntaxKind.GetAccessor ? SyntaxKind.SetAccessor : SyntaxKind.GetAccessor; const otherAccessor = getDeclarationOfKind(getSymbolOfNode(node), otherKind); if (otherAccessor) { - const nodeFlags = getEffectiveModifierFlags(node); - const otherFlags = getEffectiveModifierFlags(otherAccessor); - if ((nodeFlags & ModifierFlags.Abstract) !== (otherFlags & ModifierFlags.Abstract)) { + const getter = node.kind === SyntaxKind.GetAccessor ? node : otherAccessor; + const setter = node.kind === SyntaxKind.SetAccessor ? node : otherAccessor; + const getterFlags = getEffectiveModifierFlags(getter); + const setterFlags = getEffectiveModifierFlags(setter); + if ((getterFlags & ModifierFlags.Abstract) !== (setterFlags & ModifierFlags.Abstract)) { error(node.name, Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); } + if (((getterFlags & ModifierFlags.Protected) && !(setterFlags & (ModifierFlags.Protected | ModifierFlags.Private))) || + ((getterFlags & ModifierFlags.Private) && !(setterFlags & ModifierFlags.Private))) { + error(node.name, Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter); + } - // TypeScript 1.0 spec (April 2014): 4.5 - // If both accessors include type annotations, the specified types must be identical. - checkAccessorDeclarationTypesAssignable(node, otherAccessor, getAnnotatedAccessorType, Diagnostics.get_and_set_accessor_must_have_the_comparable_types); + checkAccessorDeclarationTypesAssignable(getter, setter, getAnnotatedAccessorType, Diagnostics.The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type); checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, Diagnostics.get_and_set_accessor_must_have_the_same_this_type); } } @@ -32345,8 +32368,8 @@ namespace ts { return checkAccessorDeclarationTypesMatch(first, second, getAnnotatedType, isTypeIdenticalTo, message); } - function checkAccessorDeclarationTypesAssignable(first: AccessorDeclaration, second: AccessorDeclaration, getAnnotatedType: (a: AccessorDeclaration) => Type | undefined, message: DiagnosticMessage) { - return checkAccessorDeclarationTypesMatch(first, second, getAnnotatedType, areTypesComparable, message); + function checkAccessorDeclarationTypesAssignable(getter: AccessorDeclaration, setter: AccessorDeclaration, getAnnotatedType: (a: AccessorDeclaration) => Type | undefined, message: DiagnosticMessage) { + return checkAccessorDeclarationTypesMatch(getter, setter, getAnnotatedType, isTypeAssignableTo, message); } function checkAccessorDeclarationTypesMatch(first: AccessorDeclaration, second: AccessorDeclaration, getAnnotatedType: (a: AccessorDeclaration) => Type | undefined, match: typeof areTypesComparable, message: DiagnosticMessage) { @@ -32357,7 +32380,6 @@ namespace ts { } } - function checkMissingDeclaration(node: Node) { checkDecorators(node); } @@ -40171,7 +40193,7 @@ namespace ts { } function checkGrammarAccessor(accessor: AccessorDeclaration): boolean { - if (!(accessor.flags & NodeFlags.Ambient)) { + if (!(accessor.flags & NodeFlags.Ambient) && (accessor.parent.kind !== SyntaxKind.TypeLiteral) && (accessor.parent.kind !== SyntaxKind.InterfaceDeclaration)) { if (languageVersion < ScriptTarget.ES5) { return grammarErrorOnNode(accessor.name, Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0da298d8f7786..ed5ef995ad3b0 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1697,7 +1697,7 @@ "category": "Error", "code": 2378 }, - "'get' and 'set' accessor must have comparable types.": { + "The return type of a 'get' accessor must be assignable to its 'set' accessor type": { "category": "Error", "code": 2380 }, @@ -3231,6 +3231,10 @@ "category": "Error", "code": 2797 }, + "A get accessor must be at least as accessible as the setter": { + "category": "Error", + "code": 2798 + }, "Import declaration '{0}' is using private name '{1}'.": { "category": "Error", diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index cd61ad8ec807d..1526d599e2f7d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -1305,6 +1305,8 @@ namespace ts { } function parseErrorAtPosition(start: number, length: number, message: DiagnosticMessage, arg0?: any): void { + debugger; + // Don't report another error if it would just be at the same position as the last error. const lastError = lastOrUndefined(parseDiagnostics); if (!lastError || start !== lastError.start) { @@ -3172,7 +3174,10 @@ namespace ts { function isTypeMemberStart(): boolean { // Return true if we have the start of a signature member - if (token() === SyntaxKind.OpenParenToken || token() === SyntaxKind.LessThanToken) { + if (token() === SyntaxKind.OpenParenToken || + token() === SyntaxKind.LessThanToken || + token() === SyntaxKind.GetKeyword || + token() === SyntaxKind.SetKeyword) { return true; } let idToken = false; @@ -3213,6 +3218,14 @@ namespace ts { const pos = getNodePos(); const hasJSDoc = hasPrecedingJSDocComment(); const modifiers = parseModifiers(); + if (parseContextualModifier(SyntaxKind.GetKeyword)) { + return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, SyntaxKind.GetAccessor); + } + + if (parseContextualModifier(SyntaxKind.SetKeyword)) { + return parseAccessorDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers, SyntaxKind.SetAccessor); + } + if (isIndexSignature()) { return parseIndexSignatureDeclaration(pos, hasJSDoc, /*decorators*/ undefined, modifiers); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4352e2f2171e3..a55a81be8d7a5 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1453,9 +1453,9 @@ namespace ts { // See the comment on MethodDeclaration for the intuition behind GetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.GetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; /* @internal */ typeParameters?: NodeArray; // Present for use with reporting a grammar error @@ -1463,9 +1463,9 @@ namespace ts { // See the comment on MethodDeclaration for the intuition behind SetAccessorDeclaration being a // ClassElement and an ObjectLiteralElement. - export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.SetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; /* @internal */ typeParameters?: NodeArray; // Present for use with reporting a grammar error diff --git a/tests/baselines/reference/abstractPropertyNegative.errors.txt b/tests/baselines/reference/abstractPropertyNegative.errors.txt index fd09b024213c4..d7b2fa592f839 100644 --- a/tests/baselines/reference/abstractPropertyNegative.errors.txt +++ b/tests/baselines/reference/abstractPropertyNegative.errors.txt @@ -1,5 +1,4 @@ -tests/cases/compiler/abstractPropertyNegative.ts(10,18): error TS2380: 'get' and 'set' accessor must have the same type. -tests/cases/compiler/abstractPropertyNegative.ts(11,18): error TS2380: 'get' and 'set' accessor must have the same type. +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'. @@ -19,7 +18,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 (16 errors) ==== +==== tests/cases/compiler/abstractPropertyNegative.ts (15 errors) ==== interface A { prop: string; m(): string; @@ -31,10 +30,8 @@ tests/cases/compiler/abstractPropertyNegative.ts(41,18): error TS2676: Accessors abstract m(): string; abstract get mismatch(): string; ~~~~~~~~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. +!!! error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type abstract set mismatch(val: number); // error, not same type - ~~~~~~~~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. } class C extends B { ~ diff --git a/tests/baselines/reference/accessorWithMismatchedAccessibilityModifiers.errors.txt b/tests/baselines/reference/accessorWithMismatchedAccessibilityModifiers.errors.txt deleted file mode 100644 index 9d1b7ca9a30b5..0000000000000 --- a/tests/baselines/reference/accessorWithMismatchedAccessibilityModifiers.errors.txt +++ /dev/null @@ -1,58 +0,0 @@ -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(2,9): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(5,17): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(10,19): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(13,17): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(18,19): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(20,9): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(26,26): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts(28,16): error TS2379: Getter and setter accessors do not agree in visibility. - - -==== tests/cases/conformance/classes/propertyMemberDeclarations/memberAccessorDeclarations/accessorWithMismatchedAccessibilityModifiers.ts (8 errors) ==== - class C { - get x() { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - return 1; - } - private set x(v) { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - } - } - - class D { - protected get x() { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - return 1; - } - private set x(v) { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - } - } - - class E { - protected set x(v) { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - } - get x() { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - return 1; - } - } - - class F { - protected static set x(v) { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - } - static get x() { - ~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. - return 1; - } - } \ No newline at end of file diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index be9c82b1e1d9f..cb4841bf32f9a 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -820,15 +820,15 @@ declare namespace ts { readonly kind: SyntaxKind.SemicolonClassElement; readonly parent: ClassLikeDeclaration; } - export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.GetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; } - export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.SetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; } diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index f8f86d5b88fb2..b992f076053f6 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -820,15 +820,15 @@ declare namespace ts { readonly kind: SyntaxKind.SemicolonClassElement; readonly parent: ClassLikeDeclaration; } - export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface GetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.GetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; } - export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, ObjectLiteralElement, JSDocContainer { + export interface SetAccessorDeclaration extends FunctionLikeDeclarationBase, ClassElement, TypeElement, ObjectLiteralElement, JSDocContainer { readonly kind: SyntaxKind.SetAccessor; - readonly parent: ClassLikeDeclaration | ObjectLiteralExpression; + readonly parent: ClassLikeDeclaration | ObjectLiteralExpression | TypeLiteralNode | InterfaceDeclaration; readonly name: PropertyName; readonly body?: FunctionBody; } diff --git a/tests/baselines/reference/divergentAccessors1.errors.txt b/tests/baselines/reference/divergentAccessors1.errors.txt new file mode 100644 index 0000000000000..de23d2d0e1b5b --- /dev/null +++ b/tests/baselines/reference/divergentAccessors1.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/divergentAccessors1.ts(2,5): error TS7008: Member 'public' implicitly has an 'any' type. + + +==== tests/cases/compiler/divergentAccessors1.ts (1 errors) ==== + class Base { + public + ~~~~~~ +!!! error TS7008: Member 'public' implicitly has an 'any' type. + } \ No newline at end of file diff --git a/tests/baselines/reference/divergentAccessors1.js b/tests/baselines/reference/divergentAccessors1.js new file mode 100644 index 0000000000000..c59aff9fe4d65 --- /dev/null +++ b/tests/baselines/reference/divergentAccessors1.js @@ -0,0 +1,12 @@ +//// [divergentAccessors1.ts] +class Base { + public +} + +//// [divergentAccessors1.js] +"use strict"; +var Base = /** @class */ (function () { + function Base() { + } + return Base; +}()); diff --git a/tests/baselines/reference/divergentAccessors1.symbols b/tests/baselines/reference/divergentAccessors1.symbols new file mode 100644 index 0000000000000..71bce46e5a74f --- /dev/null +++ b/tests/baselines/reference/divergentAccessors1.symbols @@ -0,0 +1,7 @@ +=== tests/cases/compiler/divergentAccessors1.ts === +class Base { +>Base : Symbol(Base, Decl(divergentAccessors1.ts, 0, 0)) + + public +>public : Symbol(Base.public, Decl(divergentAccessors1.ts, 0, 12)) +} diff --git a/tests/baselines/reference/divergentAccessors1.types b/tests/baselines/reference/divergentAccessors1.types new file mode 100644 index 0000000000000..8d917ed7f1d21 --- /dev/null +++ b/tests/baselines/reference/divergentAccessors1.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/divergentAccessors1.ts === +class Base { +>Base : Base + + public +>public : any +} diff --git a/tests/baselines/reference/divergentAccessorsTypes1.errors.txt b/tests/baselines/reference/divergentAccessorsTypes1.errors.txt new file mode 100644 index 0000000000000..59f2116c1aecc --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsTypes1.errors.txt @@ -0,0 +1,78 @@ +tests/cases/compiler/divergentAccessorsTypes1.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsTypes1.ts(3,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsTypes1.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsTypes1.ts(9,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + +==== tests/cases/compiler/divergentAccessorsTypes1.ts (4 errors) ==== + class Test1 { + get foo(): string { return "" } + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + set foo(s: string | number) { + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + let a = s as string; + let b = s as number; + } + + get bar(): string | number { return "" } + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + set bar(s: string | number | boolean) { + ~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + } + } + + interface Test2 { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); + } + + type Test3 = { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); + }; + + { + const t = new Test1(); + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; + } + + { + const t = {} as Test2; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; + } + + { + const t = {} as Test3; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; + } \ No newline at end of file diff --git a/tests/baselines/reference/divergentAccessorsTypes1.js b/tests/baselines/reference/divergentAccessorsTypes1.js new file mode 100644 index 0000000000000..e7bb4c93245ed --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsTypes1.js @@ -0,0 +1,118 @@ +//// [divergentAccessorsTypes1.ts] +class Test1 { + get foo(): string { return "" } + set foo(s: string | number) { + let a = s as string; + let b = s as number; + } + + get bar(): string | number { return "" } + set bar(s: string | number | boolean) { + } +} + +interface Test2 { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); +} + +type Test3 = { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); +}; + +{ + const t = new Test1(); + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} + +{ + const t = {} as Test2; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} + +{ + const t = {} as Test3; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} + +//// [divergentAccessorsTypes1.js] +"use strict"; +var Test1 = /** @class */ (function () { + function Test1() { + } + Object.defineProperty(Test1.prototype, "foo", { + get: function () { return ""; }, + set: function (s) { + var a = s; + var b = s; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Test1.prototype, "bar", { + get: function () { return ""; }, + set: function (s) { + }, + enumerable: false, + configurable: true + }); + return Test1; +}()); +{ + var t = new Test1(); + t.foo = 32; + var m = t.foo; + // See how CFA interacts with out-of-type writes + t.bar = 42; + var n = t.bar; + t.bar = false; + var o = t.bar; +} +{ + var t = {}; + t.foo = 32; + var m = t.foo; + // See how CFA interacts with out-of-type writes + t.bar = 42; + var n = t.bar; + t.bar = false; + var o = t.bar; +} +{ + var t = {}; + t.foo = 32; + var m = t.foo; + // See how CFA interacts with out-of-type writes + t.bar = 42; + var n = t.bar; + t.bar = false; + var o = t.bar; +} diff --git a/tests/baselines/reference/divergentAccessorsTypes1.symbols b/tests/baselines/reference/divergentAccessorsTypes1.symbols new file mode 100644 index 0000000000000..3df60f476a285 --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsTypes1.symbols @@ -0,0 +1,185 @@ +=== tests/cases/compiler/divergentAccessorsTypes1.ts === +class Test1 { +>Test1 : Symbol(Test1, Decl(divergentAccessorsTypes1.ts, 0, 0)) + + get foo(): string { return "" } +>foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) + + set foo(s: string | number) { +>foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 2, 12)) + + let a = s as string; +>a : Symbol(a, Decl(divergentAccessorsTypes1.ts, 3, 11)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 2, 12)) + + let b = s as number; +>b : Symbol(b, Decl(divergentAccessorsTypes1.ts, 4, 11)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 2, 12)) + } + + get bar(): string | number { return "" } +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) + + set bar(s: string | number | boolean) { +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 8, 12)) + } +} + +interface Test2 { +>Test2 : Symbol(Test2, Decl(divergentAccessorsTypes1.ts, 10, 1)) + + get foo(): string; +>foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) + + set foo(s: string | number); +>foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 14, 12)) + + get bar(): string | number; +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) + + set bar(s: string | number | boolean); +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 17, 12)) +} + +type Test3 = { +>Test3 : Symbol(Test3, Decl(divergentAccessorsTypes1.ts, 18, 1)) + + get foo(): string; +>foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) + + set foo(s: string | number); +>foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 22, 12)) + + get bar(): string | number; +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) + + set bar(s: string | number | boolean); +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +>s : Symbol(s, Decl(divergentAccessorsTypes1.ts, 25, 12)) + +}; + +{ + const t = new Test1(); +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>Test1 : Symbol(Test1, Decl(divergentAccessorsTypes1.ts, 0, 0)) + + t.foo = 32; +>t.foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) + + let m: string = t.foo; +>m : Symbol(m, Decl(divergentAccessorsTypes1.ts, 31, 7)) +>t.foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>foo : Symbol(Test1.foo, Decl(divergentAccessorsTypes1.ts, 0, 13), Decl(divergentAccessorsTypes1.ts, 1, 35)) + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) + + let n: number = t.bar; +>n : Symbol(n, Decl(divergentAccessorsTypes1.ts, 35, 7)) +>t.bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) + + t.bar = false; +>t.bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) + + let o = t.bar; +>o : Symbol(o, Decl(divergentAccessorsTypes1.ts, 37, 7)) +>t.bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 29, 9)) +>bar : Symbol(Test1.bar, Decl(divergentAccessorsTypes1.ts, 5, 5), Decl(divergentAccessorsTypes1.ts, 7, 44)) +} + +{ + const t = {} as Test2; +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>Test2 : Symbol(Test2, Decl(divergentAccessorsTypes1.ts, 10, 1)) + + t.foo = 32; +>t.foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) + + let m: string = t.foo; +>m : Symbol(m, Decl(divergentAccessorsTypes1.ts, 43, 7)) +>t.foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>foo : Symbol(Test2.foo, Decl(divergentAccessorsTypes1.ts, 12, 17), Decl(divergentAccessorsTypes1.ts, 13, 22)) + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) + + let n: number = t.bar; +>n : Symbol(n, Decl(divergentAccessorsTypes1.ts, 47, 7)) +>t.bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) + + t.bar = false; +>t.bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) + + let o = t.bar; +>o : Symbol(o, Decl(divergentAccessorsTypes1.ts, 49, 7)) +>t.bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 41, 9)) +>bar : Symbol(Test2.bar, Decl(divergentAccessorsTypes1.ts, 14, 32), Decl(divergentAccessorsTypes1.ts, 16, 31)) +} + +{ + const t = {} as Test3; +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>Test3 : Symbol(Test3, Decl(divergentAccessorsTypes1.ts, 18, 1)) + + t.foo = 32; +>t.foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) + + let m: string = t.foo; +>m : Symbol(m, Decl(divergentAccessorsTypes1.ts, 55, 7)) +>t.foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>foo : Symbol(foo, Decl(divergentAccessorsTypes1.ts, 20, 14), Decl(divergentAccessorsTypes1.ts, 21, 22)) + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) + + let n: number = t.bar; +>n : Symbol(n, Decl(divergentAccessorsTypes1.ts, 59, 7)) +>t.bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) + + t.bar = false; +>t.bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) + + let o = t.bar; +>o : Symbol(o, Decl(divergentAccessorsTypes1.ts, 61, 7)) +>t.bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +>t : Symbol(t, Decl(divergentAccessorsTypes1.ts, 53, 9)) +>bar : Symbol(bar, Decl(divergentAccessorsTypes1.ts, 22, 32), Decl(divergentAccessorsTypes1.ts, 24, 31)) +} diff --git a/tests/baselines/reference/divergentAccessorsTypes1.types b/tests/baselines/reference/divergentAccessorsTypes1.types new file mode 100644 index 0000000000000..be4ebc6243c3a --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsTypes1.types @@ -0,0 +1,208 @@ +=== tests/cases/compiler/divergentAccessorsTypes1.ts === +class Test1 { +>Test1 : Test1 + + get foo(): string { return "" } +>foo : string +>"" : "" + + set foo(s: string | number) { +>foo : string +>s : string | number + + let a = s as string; +>a : string +>s as string : string +>s : string | number + + let b = s as number; +>b : number +>s as number : number +>s : string | number + } + + get bar(): string | number { return "" } +>bar : string | number +>"" : "" + + set bar(s: string | number | boolean) { +>bar : string | number +>s : string | number | boolean + } +} + +interface Test2 { + get foo(): string; +>foo : string + + set foo(s: string | number); +>foo : string +>s : string | number + + get bar(): string | number; +>bar : string | number + + set bar(s: string | number | boolean); +>bar : string | number +>s : string | number | boolean +} + +type Test3 = { +>Test3 : Test3 + + get foo(): string; +>foo : string + + set foo(s: string | number); +>foo : string +>s : string | number + + get bar(): string | number; +>bar : string | number + + set bar(s: string | number | boolean); +>bar : string | number +>s : string | number | boolean + +}; + +{ + const t = new Test1(); +>t : Test1 +>new Test1() : Test1 +>Test1 : typeof Test1 + + t.foo = 32; +>t.foo = 32 : 32 +>t.foo : string | number +>t : Test1 +>foo : string | number +>32 : 32 + + let m: string = t.foo; +>m : string +>t.foo : string +>t : Test1 +>foo : string + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar = 42 : 42 +>t.bar : string | number | boolean +>t : Test1 +>bar : string | number | boolean +>42 : 42 + + let n: number = t.bar; +>n : number +>t.bar : number +>t : Test1 +>bar : number + + t.bar = false; +>t.bar = false : false +>t.bar : string | number | boolean +>t : Test1 +>bar : string | number | boolean +>false : false + + let o = t.bar; +>o : string | number +>t.bar : string | number +>t : Test1 +>bar : string | number +} + +{ + const t = {} as Test2; +>t : Test2 +>{} as Test2 : Test2 +>{} : {} + + t.foo = 32; +>t.foo = 32 : 32 +>t.foo : string | number +>t : Test2 +>foo : string | number +>32 : 32 + + let m: string = t.foo; +>m : string +>t.foo : string +>t : Test2 +>foo : string + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar = 42 : 42 +>t.bar : string | number | boolean +>t : Test2 +>bar : string | number | boolean +>42 : 42 + + let n: number = t.bar; +>n : number +>t.bar : number +>t : Test2 +>bar : number + + t.bar = false; +>t.bar = false : false +>t.bar : string | number | boolean +>t : Test2 +>bar : string | number | boolean +>false : false + + let o = t.bar; +>o : string | number +>t.bar : string | number +>t : Test2 +>bar : string | number +} + +{ + const t = {} as Test3; +>t : Test3 +>{} as Test3 : Test3 +>{} : {} + + t.foo = 32; +>t.foo = 32 : 32 +>t.foo : string | number +>t : Test3 +>foo : string | number +>32 : 32 + + let m: string = t.foo; +>m : string +>t.foo : string +>t : Test3 +>foo : string + + // See how CFA interacts with out-of-type writes + t.bar = 42; +>t.bar = 42 : 42 +>t.bar : string | number | boolean +>t : Test3 +>bar : string | number | boolean +>42 : 42 + + let n: number = t.bar; +>n : number +>t.bar : number +>t : Test3 +>bar : number + + t.bar = false; +>t.bar = false : false +>t.bar : string | number | boolean +>t : Test3 +>bar : string | number | boolean +>false : false + + let o = t.bar; +>o : string | number +>t.bar : string | number +>t : Test3 +>bar : string | number +} diff --git a/tests/baselines/reference/divergentAccessorsVisibility1.errors.txt b/tests/baselines/reference/divergentAccessorsVisibility1.errors.txt new file mode 100644 index 0000000000000..0941c4d702038 --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsVisibility1.errors.txt @@ -0,0 +1,368 @@ +tests/cases/compiler/divergentAccessorsVisibility1.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(3,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(5,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(6,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(9,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(11,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(11,19): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(12,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(12,9): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(14,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(15,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(17,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(18,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(20,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(20,17): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(21,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(21,9): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(23,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(23,17): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(24,19): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(24,19): error TS2798: A get accessor must be at least as accessible as the setter +tests/cases/compiler/divergentAccessorsVisibility1.ts(26,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(27,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/compiler/divergentAccessorsVisibility1.ts(66,14): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(69,14): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(72,14): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(80,19): error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(81,19): error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(82,19): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(86,14): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(89,14): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(92,14): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(99,10): error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(100,10): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(102,10): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(103,10): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(105,10): error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(106,10): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(111,15): error TS2445: Property 'ProtectedPublic' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(112,15): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(113,15): error TS2445: Property 'ProtectedPrivate' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(114,15): error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(115,15): error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(116,15): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(119,10): error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(120,10): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(122,10): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(123,10): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(125,10): error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(126,10): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(129,11): error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(130,11): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(132,11): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(133,11): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(135,11): error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(136,11): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(141,16): error TS2445: Property 'ProtectedPublic' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(142,16): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(143,16): error TS2445: Property 'ProtectedPrivate' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(144,16): error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(145,16): error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(146,16): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(149,11): error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(150,11): error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(152,11): error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(153,11): error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. +tests/cases/compiler/divergentAccessorsVisibility1.ts(155,11): error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. +tests/cases/compiler/divergentAccessorsVisibility1.ts(156,11): error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + +==== tests/cases/compiler/divergentAccessorsVisibility1.ts (69 errors) ==== + class Base { + get PublicPublic() { return 0; } + ~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + set PublicPublic(v) { return; } + ~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + get PublicProtected() { return 0; } + ~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + protected set PublicProtected(v) { return; } + ~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + get PublicPrivate() { return 0; } + ~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + private set PublicPrivate(v) { return; } + ~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + protected get ProtectedPublic() { return 0; } + ~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + set ProtectedPublic(v) { return; } + ~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + + protected get ProtectedProtected() { return 0; } + ~~~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + protected set ProtectedProtected(v) { return; } + ~~~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + protected get ProtectedPrivate() { return 0; } + ~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + private set ProtectedPrivate(v) { return; } + ~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + private get PrivatePublic() { return 0; } + ~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + set PrivatePublic(v) { return; } + ~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + + private get PrivateProtected() { return 0; } + ~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + protected set PrivateProtected(v) { return; } + ~~~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + ~~~~~~~~~~~~~~~~ +!!! error TS2798: A get accessor must be at least as accessible as the setter + + private get PrivatePrivate() { return 0; } + ~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + private set PrivatePrivate(v) { return; } + ~~~~~~~~~~~~~~ +!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. + + test() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + } + } + + class Derived extends Base { + test2() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. + void this.PrivateProtected; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. + void this.PrivatePrivate; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + } + } + + declare const base: Base, deriv: Derived; + function fn() { + base.PublicPublic = 0; + base.PublicProtected = 0; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. + base.PublicPrivate = 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + base.ProtectedPublic = 0; + base.ProtectedProtected = 0; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + base.ProtectedPrivate = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + base.PrivatePublic = 0; + base.PrivateProtected = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. + base.PrivatePrivate = 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + void base.PublicPublic; + void base.PublicProtected; + void base.PublicPrivate; + void base.ProtectedPublic; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedPublic' is protected and only accessible within class 'Base' and its subclasses. + void base.ProtectedProtected; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + void base.ProtectedPrivate; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedPrivate' is protected and only accessible within class 'Base' and its subclasses. + void base.PrivatePublic; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. + void base.PrivateProtected; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. + void base.PrivatePrivate; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + base.PublicPublic += 0; + base.PublicProtected += 0; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. + base.PublicPrivate += 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + base.ProtectedPublic += 0; + base.ProtectedProtected += 0; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + base.ProtectedPrivate += 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + base.PrivatePublic += 0; + base.PrivateProtected += 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. + base.PrivatePrivate += 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + deriv.PublicPublic = 0; + deriv.PublicProtected = 0; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.PublicPrivate = 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + deriv.ProtectedPublic = 0; + deriv.ProtectedProtected = 0; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.ProtectedPrivate = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + deriv.PrivatePublic = 0; + deriv.PrivateProtected = 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.PrivatePrivate = 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + void deriv.PublicPublic; + void deriv.PublicProtected; + void deriv.PublicPrivate; + void deriv.ProtectedPublic; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedPublic' is protected and only accessible within class 'Base' and its subclasses. + void deriv.ProtectedProtected; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + void deriv.ProtectedPrivate; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedPrivate' is protected and only accessible within class 'Base' and its subclasses. + void deriv.PrivatePublic; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePublic' is private and only accessible within class 'Base'. + void deriv.PrivateProtected; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivateProtected' is private and only accessible within class 'Base'. + void deriv.PrivatePrivate; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + + deriv.PublicPublic += 0; + deriv.PublicProtected += 0; + ~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PublicProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.PublicPrivate += 0; + ~~~~~~~~~~~~~ +!!! error TS2341: Property 'PublicPrivate' is private and only accessible within class 'Base'. + deriv.ProtectedPublic += 0; + deriv.ProtectedProtected += 0; + ~~~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'ProtectedProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.ProtectedPrivate += 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2341: Property 'ProtectedPrivate' is private and only accessible within class 'Base'. + deriv.PrivatePublic += 0; + deriv.PrivateProtected += 0; + ~~~~~~~~~~~~~~~~ +!!! error TS2445: Property 'PrivateProtected' is protected and only accessible within class 'Base' and its subclasses. + deriv.PrivatePrivate += 0; + ~~~~~~~~~~~~~~ +!!! error TS2341: Property 'PrivatePrivate' is private and only accessible within class 'Base'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/divergentAccessorsVisibility1.js b/tests/baselines/reference/divergentAccessorsVisibility1.js new file mode 100644 index 0000000000000..1a62d22a5cb40 --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsVisibility1.js @@ -0,0 +1,357 @@ +//// [divergentAccessorsVisibility1.ts] +class Base { + get PublicPublic() { return 0; } + set PublicPublic(v) { return; } + + get PublicProtected() { return 0; } + protected set PublicProtected(v) { return; } + + get PublicPrivate() { return 0; } + private set PublicPrivate(v) { return; } + + protected get ProtectedPublic() { return 0; } + set ProtectedPublic(v) { return; } + + protected get ProtectedProtected() { return 0; } + protected set ProtectedProtected(v) { return; } + + protected get ProtectedPrivate() { return 0; } + private set ProtectedPrivate(v) { return; } + + private get PrivatePublic() { return 0; } + set PrivatePublic(v) { return; } + + private get PrivateProtected() { return 0; } + protected set PrivateProtected(v) { return; } + + private get PrivatePrivate() { return 0; } + private set PrivatePrivate(v) { return; } + + test() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + } +} + +class Derived extends Base { + test2() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + } +} + +declare const base: Base, deriv: Derived; +function fn() { + base.PublicPublic = 0; + base.PublicProtected = 0; + base.PublicPrivate = 0; + base.ProtectedPublic = 0; + base.ProtectedProtected = 0; + base.ProtectedPrivate = 0; + base.PrivatePublic = 0; + base.PrivateProtected = 0; + base.PrivatePrivate = 0; + + void base.PublicPublic; + void base.PublicProtected; + void base.PublicPrivate; + void base.ProtectedPublic; + void base.ProtectedProtected; + void base.ProtectedPrivate; + void base.PrivatePublic; + void base.PrivateProtected; + void base.PrivatePrivate; + + base.PublicPublic += 0; + base.PublicProtected += 0; + base.PublicPrivate += 0; + base.ProtectedPublic += 0; + base.ProtectedProtected += 0; + base.ProtectedPrivate += 0; + base.PrivatePublic += 0; + base.PrivateProtected += 0; + base.PrivatePrivate += 0; + + deriv.PublicPublic = 0; + deriv.PublicProtected = 0; + deriv.PublicPrivate = 0; + deriv.ProtectedPublic = 0; + deriv.ProtectedProtected = 0; + deriv.ProtectedPrivate = 0; + deriv.PrivatePublic = 0; + deriv.PrivateProtected = 0; + deriv.PrivatePrivate = 0; + + void deriv.PublicPublic; + void deriv.PublicProtected; + void deriv.PublicPrivate; + void deriv.ProtectedPublic; + void deriv.ProtectedProtected; + void deriv.ProtectedPrivate; + void deriv.PrivatePublic; + void deriv.PrivateProtected; + void deriv.PrivatePrivate; + + deriv.PublicPublic += 0; + deriv.PublicProtected += 0; + deriv.PublicPrivate += 0; + deriv.ProtectedPublic += 0; + deriv.ProtectedProtected += 0; + deriv.ProtectedPrivate += 0; + deriv.PrivatePublic += 0; + deriv.PrivateProtected += 0; + deriv.PrivatePrivate += 0; +} + + +//// [divergentAccessorsVisibility1.js] +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var Base = /** @class */ (function () { + function Base() { + } + Object.defineProperty(Base.prototype, "PublicPublic", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "PublicProtected", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "PublicPrivate", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "ProtectedPublic", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "ProtectedProtected", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "ProtectedPrivate", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "PrivatePublic", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "PrivateProtected", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Base.prototype, "PrivatePrivate", { + get: function () { return 0; }, + set: function (v) { return; }, + enumerable: false, + configurable: true + }); + Base.prototype.test = function () { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + }; + return Base; +}()); +var Derived = /** @class */ (function (_super) { + __extends(Derived, _super); + function Derived() { + return _super !== null && _super.apply(this, arguments) || this; + } + Derived.prototype.test2 = function () { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + }; + return Derived; +}(Base)); +function fn() { + base.PublicPublic = 0; + base.PublicProtected = 0; + base.PublicPrivate = 0; + base.ProtectedPublic = 0; + base.ProtectedProtected = 0; + base.ProtectedPrivate = 0; + base.PrivatePublic = 0; + base.PrivateProtected = 0; + base.PrivatePrivate = 0; + void base.PublicPublic; + void base.PublicProtected; + void base.PublicPrivate; + void base.ProtectedPublic; + void base.ProtectedProtected; + void base.ProtectedPrivate; + void base.PrivatePublic; + void base.PrivateProtected; + void base.PrivatePrivate; + base.PublicPublic += 0; + base.PublicProtected += 0; + base.PublicPrivate += 0; + base.ProtectedPublic += 0; + base.ProtectedProtected += 0; + base.ProtectedPrivate += 0; + base.PrivatePublic += 0; + base.PrivateProtected += 0; + base.PrivatePrivate += 0; + deriv.PublicPublic = 0; + deriv.PublicProtected = 0; + deriv.PublicPrivate = 0; + deriv.ProtectedPublic = 0; + deriv.ProtectedProtected = 0; + deriv.ProtectedPrivate = 0; + deriv.PrivatePublic = 0; + deriv.PrivateProtected = 0; + deriv.PrivatePrivate = 0; + void deriv.PublicPublic; + void deriv.PublicProtected; + void deriv.PublicPrivate; + void deriv.ProtectedPublic; + void deriv.ProtectedProtected; + void deriv.ProtectedPrivate; + void deriv.PrivatePublic; + void deriv.PrivateProtected; + void deriv.PrivatePrivate; + deriv.PublicPublic += 0; + deriv.PublicProtected += 0; + deriv.PublicPrivate += 0; + deriv.ProtectedPublic += 0; + deriv.ProtectedProtected += 0; + deriv.ProtectedPrivate += 0; + deriv.PrivatePublic += 0; + deriv.PrivateProtected += 0; + deriv.PrivatePrivate += 0; +} diff --git a/tests/baselines/reference/divergentAccessorsVisibility1.symbols b/tests/baselines/reference/divergentAccessorsVisibility1.symbols new file mode 100644 index 0000000000000..84dd4b1596d68 --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsVisibility1.symbols @@ -0,0 +1,631 @@ +=== tests/cases/compiler/divergentAccessorsVisibility1.ts === +class Base { +>Base : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) + + get PublicPublic() { return 0; } +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + set PublicPublic(v) { return; } +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 2, 21)) + + get PublicProtected() { return 0; } +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + protected set PublicProtected(v) { return; } +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 5, 34)) + + get PublicPrivate() { return 0; } +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + private set PublicPrivate(v) { return; } +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 8, 30)) + + protected get ProtectedPublic() { return 0; } +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + set ProtectedPublic(v) { return; } +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 11, 24)) + + protected get ProtectedProtected() { return 0; } +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + protected set ProtectedProtected(v) { return; } +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 14, 37)) + + protected get ProtectedPrivate() { return 0; } +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + private set ProtectedPrivate(v) { return; } +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 17, 33)) + + private get PrivatePublic() { return 0; } +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + set PrivatePublic(v) { return; } +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 20, 22)) + + private get PrivateProtected() { return 0; } +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + protected set PrivateProtected(v) { return; } +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 23, 35)) + + private get PrivatePrivate() { return 0; } +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + private set PrivatePrivate(v) { return; } +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>v : Symbol(v, Decl(divergentAccessorsVisibility1.ts, 26, 31)) + + test() { +>test : Symbol(Base.test, Decl(divergentAccessorsVisibility1.ts, 26, 45)) + + this.PublicPublic = 0; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + this.PublicProtected = 0; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + this.PublicPrivate = 0; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + this.ProtectedPublic = 0; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + this.ProtectedProtected = 0; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + this.ProtectedPrivate = 0; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + this.PrivatePublic = 0; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + this.PrivateProtected = 0; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + this.PrivatePrivate = 0; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + void this.PublicPublic; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + void this.PublicProtected; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + void this.PublicPrivate; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + void this.ProtectedPublic; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + void this.ProtectedProtected; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + void this.ProtectedPrivate; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + void this.PrivatePublic; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + void this.PrivateProtected; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + void this.PrivatePrivate; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + this.PublicPublic += 0; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + this.PublicProtected += 0; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + this.PublicPrivate += 0; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + this.ProtectedPublic += 0; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + this.ProtectedProtected += 0; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + this.ProtectedPrivate += 0; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + this.PrivatePublic += 0; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + this.PrivateProtected += 0; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + this.PrivatePrivate += 0; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + } +} + +class Derived extends Base { +>Derived : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>Base : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) + + test2() { +>test2 : Symbol(Derived.test2, Decl(divergentAccessorsVisibility1.ts, 61, 28)) + + this.PublicPublic = 0; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + this.PublicProtected = 0; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + this.PublicPrivate = 0; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + this.ProtectedPublic = 0; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + this.ProtectedProtected = 0; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + this.ProtectedPrivate = 0; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + this.PrivatePublic = 0; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + this.PrivateProtected = 0; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + this.PrivatePrivate = 0; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + void this.PublicPublic; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + void this.PublicProtected; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + void this.PublicPrivate; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + void this.ProtectedPublic; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + void this.ProtectedProtected; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + void this.ProtectedPrivate; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + void this.PrivatePublic; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + void this.PrivateProtected; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + void this.PrivatePrivate; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + this.PublicPublic += 0; +>this.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + this.PublicProtected += 0; +>this.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + this.PublicPrivate += 0; +>this.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + this.ProtectedPublic += 0; +>this.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + this.ProtectedProtected += 0; +>this.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + this.ProtectedPrivate += 0; +>this.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + this.PrivatePublic += 0; +>this.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + this.PrivateProtected += 0; +>this.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + this.PrivatePrivate += 0; +>this.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>this : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + } +} + +declare const base: Base, deriv: Derived; +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>Base : Symbol(Base, Decl(divergentAccessorsVisibility1.ts, 0, 0)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>Derived : Symbol(Derived, Decl(divergentAccessorsVisibility1.ts, 59, 1)) + +function fn() { +>fn : Symbol(fn, Decl(divergentAccessorsVisibility1.ts, 95, 41)) + + base.PublicPublic = 0; +>base.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + base.PublicProtected = 0; +>base.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + base.PublicPrivate = 0; +>base.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + base.ProtectedPublic = 0; +>base.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + base.ProtectedProtected = 0; +>base.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + base.ProtectedPrivate = 0; +>base.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + base.PrivatePublic = 0; +>base.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + base.PrivateProtected = 0; +>base.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + base.PrivatePrivate = 0; +>base.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + void base.PublicPublic; +>base.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + void base.PublicProtected; +>base.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + void base.PublicPrivate; +>base.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + void base.ProtectedPublic; +>base.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + void base.ProtectedProtected; +>base.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + void base.ProtectedPrivate; +>base.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + void base.PrivatePublic; +>base.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + void base.PrivateProtected; +>base.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + void base.PrivatePrivate; +>base.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + base.PublicPublic += 0; +>base.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + base.PublicProtected += 0; +>base.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + base.PublicPrivate += 0; +>base.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + base.ProtectedPublic += 0; +>base.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + base.ProtectedProtected += 0; +>base.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + base.ProtectedPrivate += 0; +>base.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + base.PrivatePublic += 0; +>base.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + base.PrivateProtected += 0; +>base.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + base.PrivatePrivate += 0; +>base.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>base : Symbol(base, Decl(divergentAccessorsVisibility1.ts, 95, 13)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + deriv.PublicPublic = 0; +>deriv.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + deriv.PublicProtected = 0; +>deriv.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + deriv.PublicPrivate = 0; +>deriv.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + deriv.ProtectedPublic = 0; +>deriv.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + deriv.ProtectedProtected = 0; +>deriv.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + deriv.ProtectedPrivate = 0; +>deriv.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + deriv.PrivatePublic = 0; +>deriv.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + deriv.PrivateProtected = 0; +>deriv.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + deriv.PrivatePrivate = 0; +>deriv.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + void deriv.PublicPublic; +>deriv.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + void deriv.PublicProtected; +>deriv.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + void deriv.PublicPrivate; +>deriv.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + void deriv.ProtectedPublic; +>deriv.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + void deriv.ProtectedProtected; +>deriv.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + void deriv.ProtectedPrivate; +>deriv.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + void deriv.PrivatePublic; +>deriv.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + void deriv.PrivateProtected; +>deriv.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + void deriv.PrivatePrivate; +>deriv.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) + + deriv.PublicPublic += 0; +>deriv.PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPublic : Symbol(Base.PublicPublic, Decl(divergentAccessorsVisibility1.ts, 0, 12), Decl(divergentAccessorsVisibility1.ts, 1, 36)) + + deriv.PublicProtected += 0; +>deriv.PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicProtected : Symbol(Base.PublicProtected, Decl(divergentAccessorsVisibility1.ts, 2, 35), Decl(divergentAccessorsVisibility1.ts, 4, 39)) + + deriv.PublicPrivate += 0; +>deriv.PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PublicPrivate : Symbol(Base.PublicPrivate, Decl(divergentAccessorsVisibility1.ts, 5, 48), Decl(divergentAccessorsVisibility1.ts, 7, 37)) + + deriv.ProtectedPublic += 0; +>deriv.ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPublic : Symbol(Base.ProtectedPublic, Decl(divergentAccessorsVisibility1.ts, 8, 44), Decl(divergentAccessorsVisibility1.ts, 10, 49)) + + deriv.ProtectedProtected += 0; +>deriv.ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedProtected : Symbol(Base.ProtectedProtected, Decl(divergentAccessorsVisibility1.ts, 11, 38), Decl(divergentAccessorsVisibility1.ts, 13, 52)) + + deriv.ProtectedPrivate += 0; +>deriv.ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>ProtectedPrivate : Symbol(Base.ProtectedPrivate, Decl(divergentAccessorsVisibility1.ts, 14, 51), Decl(divergentAccessorsVisibility1.ts, 16, 50)) + + deriv.PrivatePublic += 0; +>deriv.PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePublic : Symbol(Base.PrivatePublic, Decl(divergentAccessorsVisibility1.ts, 17, 47), Decl(divergentAccessorsVisibility1.ts, 19, 45)) + + deriv.PrivateProtected += 0; +>deriv.PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivateProtected : Symbol(Base.PrivateProtected, Decl(divergentAccessorsVisibility1.ts, 20, 36), Decl(divergentAccessorsVisibility1.ts, 22, 48)) + + deriv.PrivatePrivate += 0; +>deriv.PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +>deriv : Symbol(deriv, Decl(divergentAccessorsVisibility1.ts, 95, 25)) +>PrivatePrivate : Symbol(Base.PrivatePrivate, Decl(divergentAccessorsVisibility1.ts, 23, 49), Decl(divergentAccessorsVisibility1.ts, 25, 46)) +} + diff --git a/tests/baselines/reference/divergentAccessorsVisibility1.types b/tests/baselines/reference/divergentAccessorsVisibility1.types new file mode 100644 index 0000000000000..3f3ad6c5bd959 --- /dev/null +++ b/tests/baselines/reference/divergentAccessorsVisibility1.types @@ -0,0 +1,818 @@ +=== tests/cases/compiler/divergentAccessorsVisibility1.ts === +class Base { +>Base : Base + + get PublicPublic() { return 0; } +>PublicPublic : number +>0 : 0 + + set PublicPublic(v) { return; } +>PublicPublic : number +>v : number + + get PublicProtected() { return 0; } +>PublicProtected : number +>0 : 0 + + protected set PublicProtected(v) { return; } +>PublicProtected : number +>v : number + + get PublicPrivate() { return 0; } +>PublicPrivate : number +>0 : 0 + + private set PublicPrivate(v) { return; } +>PublicPrivate : number +>v : number + + protected get ProtectedPublic() { return 0; } +>ProtectedPublic : number +>0 : 0 + + set ProtectedPublic(v) { return; } +>ProtectedPublic : number +>v : number + + protected get ProtectedProtected() { return 0; } +>ProtectedProtected : number +>0 : 0 + + protected set ProtectedProtected(v) { return; } +>ProtectedProtected : number +>v : number + + protected get ProtectedPrivate() { return 0; } +>ProtectedPrivate : number +>0 : 0 + + private set ProtectedPrivate(v) { return; } +>ProtectedPrivate : number +>v : number + + private get PrivatePublic() { return 0; } +>PrivatePublic : number +>0 : 0 + + set PrivatePublic(v) { return; } +>PrivatePublic : number +>v : number + + private get PrivateProtected() { return 0; } +>PrivateProtected : number +>0 : 0 + + protected set PrivateProtected(v) { return; } +>PrivateProtected : number +>v : number + + private get PrivatePrivate() { return 0; } +>PrivatePrivate : number +>0 : 0 + + private set PrivatePrivate(v) { return; } +>PrivatePrivate : number +>v : number + + test() { +>test : () => void + + this.PublicPublic = 0; +>this.PublicPublic = 0 : 0 +>this.PublicPublic : number +>this : this +>PublicPublic : number +>0 : 0 + + this.PublicProtected = 0; +>this.PublicProtected = 0 : 0 +>this.PublicProtected : number +>this : this +>PublicProtected : number +>0 : 0 + + this.PublicPrivate = 0; +>this.PublicPrivate = 0 : 0 +>this.PublicPrivate : number +>this : this +>PublicPrivate : number +>0 : 0 + + this.ProtectedPublic = 0; +>this.ProtectedPublic = 0 : 0 +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number +>0 : 0 + + this.ProtectedProtected = 0; +>this.ProtectedProtected = 0 : 0 +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number +>0 : 0 + + this.ProtectedPrivate = 0; +>this.ProtectedPrivate = 0 : 0 +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number +>0 : 0 + + this.PrivatePublic = 0; +>this.PrivatePublic = 0 : 0 +>this.PrivatePublic : number +>this : this +>PrivatePublic : number +>0 : 0 + + this.PrivateProtected = 0; +>this.PrivateProtected = 0 : 0 +>this.PrivateProtected : number +>this : this +>PrivateProtected : number +>0 : 0 + + this.PrivatePrivate = 0; +>this.PrivatePrivate = 0 : 0 +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number +>0 : 0 + + void this.PublicPublic; +>void this.PublicPublic : undefined +>this.PublicPublic : number +>this : this +>PublicPublic : number + + void this.PublicProtected; +>void this.PublicProtected : undefined +>this.PublicProtected : number +>this : this +>PublicProtected : number + + void this.PublicPrivate; +>void this.PublicPrivate : undefined +>this.PublicPrivate : number +>this : this +>PublicPrivate : number + + void this.ProtectedPublic; +>void this.ProtectedPublic : undefined +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number + + void this.ProtectedProtected; +>void this.ProtectedProtected : undefined +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number + + void this.ProtectedPrivate; +>void this.ProtectedPrivate : undefined +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number + + void this.PrivatePublic; +>void this.PrivatePublic : undefined +>this.PrivatePublic : number +>this : this +>PrivatePublic : number + + void this.PrivateProtected; +>void this.PrivateProtected : undefined +>this.PrivateProtected : number +>this : this +>PrivateProtected : number + + void this.PrivatePrivate; +>void this.PrivatePrivate : undefined +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number + + this.PublicPublic += 0; +>this.PublicPublic += 0 : number +>this.PublicPublic : number +>this : this +>PublicPublic : number +>0 : 0 + + this.PublicProtected += 0; +>this.PublicProtected += 0 : number +>this.PublicProtected : number +>this : this +>PublicProtected : number +>0 : 0 + + this.PublicPrivate += 0; +>this.PublicPrivate += 0 : number +>this.PublicPrivate : number +>this : this +>PublicPrivate : number +>0 : 0 + + this.ProtectedPublic += 0; +>this.ProtectedPublic += 0 : number +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number +>0 : 0 + + this.ProtectedProtected += 0; +>this.ProtectedProtected += 0 : number +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number +>0 : 0 + + this.ProtectedPrivate += 0; +>this.ProtectedPrivate += 0 : number +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number +>0 : 0 + + this.PrivatePublic += 0; +>this.PrivatePublic += 0 : number +>this.PrivatePublic : number +>this : this +>PrivatePublic : number +>0 : 0 + + this.PrivateProtected += 0; +>this.PrivateProtected += 0 : number +>this.PrivateProtected : number +>this : this +>PrivateProtected : number +>0 : 0 + + this.PrivatePrivate += 0; +>this.PrivatePrivate += 0 : number +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number +>0 : 0 + } +} + +class Derived extends Base { +>Derived : Derived +>Base : Base + + test2() { +>test2 : () => void + + this.PublicPublic = 0; +>this.PublicPublic = 0 : 0 +>this.PublicPublic : number +>this : this +>PublicPublic : number +>0 : 0 + + this.PublicProtected = 0; +>this.PublicProtected = 0 : 0 +>this.PublicProtected : number +>this : this +>PublicProtected : number +>0 : 0 + + this.PublicPrivate = 0; +>this.PublicPrivate = 0 : 0 +>this.PublicPrivate : number +>this : this +>PublicPrivate : number +>0 : 0 + + this.ProtectedPublic = 0; +>this.ProtectedPublic = 0 : 0 +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number +>0 : 0 + + this.ProtectedProtected = 0; +>this.ProtectedProtected = 0 : 0 +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number +>0 : 0 + + this.ProtectedPrivate = 0; +>this.ProtectedPrivate = 0 : 0 +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number +>0 : 0 + + this.PrivatePublic = 0; +>this.PrivatePublic = 0 : 0 +>this.PrivatePublic : number +>this : this +>PrivatePublic : number +>0 : 0 + + this.PrivateProtected = 0; +>this.PrivateProtected = 0 : 0 +>this.PrivateProtected : number +>this : this +>PrivateProtected : number +>0 : 0 + + this.PrivatePrivate = 0; +>this.PrivatePrivate = 0 : 0 +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number +>0 : 0 + + void this.PublicPublic; +>void this.PublicPublic : undefined +>this.PublicPublic : number +>this : this +>PublicPublic : number + + void this.PublicProtected; +>void this.PublicProtected : undefined +>this.PublicProtected : number +>this : this +>PublicProtected : number + + void this.PublicPrivate; +>void this.PublicPrivate : undefined +>this.PublicPrivate : number +>this : this +>PublicPrivate : number + + void this.ProtectedPublic; +>void this.ProtectedPublic : undefined +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number + + void this.ProtectedProtected; +>void this.ProtectedProtected : undefined +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number + + void this.ProtectedPrivate; +>void this.ProtectedPrivate : undefined +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number + + void this.PrivatePublic; +>void this.PrivatePublic : undefined +>this.PrivatePublic : number +>this : this +>PrivatePublic : number + + void this.PrivateProtected; +>void this.PrivateProtected : undefined +>this.PrivateProtected : number +>this : this +>PrivateProtected : number + + void this.PrivatePrivate; +>void this.PrivatePrivate : undefined +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number + + this.PublicPublic += 0; +>this.PublicPublic += 0 : number +>this.PublicPublic : number +>this : this +>PublicPublic : number +>0 : 0 + + this.PublicProtected += 0; +>this.PublicProtected += 0 : number +>this.PublicProtected : number +>this : this +>PublicProtected : number +>0 : 0 + + this.PublicPrivate += 0; +>this.PublicPrivate += 0 : number +>this.PublicPrivate : number +>this : this +>PublicPrivate : number +>0 : 0 + + this.ProtectedPublic += 0; +>this.ProtectedPublic += 0 : number +>this.ProtectedPublic : number +>this : this +>ProtectedPublic : number +>0 : 0 + + this.ProtectedProtected += 0; +>this.ProtectedProtected += 0 : number +>this.ProtectedProtected : number +>this : this +>ProtectedProtected : number +>0 : 0 + + this.ProtectedPrivate += 0; +>this.ProtectedPrivate += 0 : number +>this.ProtectedPrivate : number +>this : this +>ProtectedPrivate : number +>0 : 0 + + this.PrivatePublic += 0; +>this.PrivatePublic += 0 : number +>this.PrivatePublic : number +>this : this +>PrivatePublic : number +>0 : 0 + + this.PrivateProtected += 0; +>this.PrivateProtected += 0 : number +>this.PrivateProtected : number +>this : this +>PrivateProtected : number +>0 : 0 + + this.PrivatePrivate += 0; +>this.PrivatePrivate += 0 : number +>this.PrivatePrivate : number +>this : this +>PrivatePrivate : number +>0 : 0 + } +} + +declare const base: Base, deriv: Derived; +>base : Base +>deriv : Derived + +function fn() { +>fn : () => void + + base.PublicPublic = 0; +>base.PublicPublic = 0 : 0 +>base.PublicPublic : number +>base : Base +>PublicPublic : number +>0 : 0 + + base.PublicProtected = 0; +>base.PublicProtected = 0 : 0 +>base.PublicProtected : number +>base : Base +>PublicProtected : number +>0 : 0 + + base.PublicPrivate = 0; +>base.PublicPrivate = 0 : 0 +>base.PublicPrivate : number +>base : Base +>PublicPrivate : number +>0 : 0 + + base.ProtectedPublic = 0; +>base.ProtectedPublic = 0 : 0 +>base.ProtectedPublic : number +>base : Base +>ProtectedPublic : number +>0 : 0 + + base.ProtectedProtected = 0; +>base.ProtectedProtected = 0 : 0 +>base.ProtectedProtected : number +>base : Base +>ProtectedProtected : number +>0 : 0 + + base.ProtectedPrivate = 0; +>base.ProtectedPrivate = 0 : 0 +>base.ProtectedPrivate : number +>base : Base +>ProtectedPrivate : number +>0 : 0 + + base.PrivatePublic = 0; +>base.PrivatePublic = 0 : 0 +>base.PrivatePublic : number +>base : Base +>PrivatePublic : number +>0 : 0 + + base.PrivateProtected = 0; +>base.PrivateProtected = 0 : 0 +>base.PrivateProtected : number +>base : Base +>PrivateProtected : number +>0 : 0 + + base.PrivatePrivate = 0; +>base.PrivatePrivate = 0 : 0 +>base.PrivatePrivate : number +>base : Base +>PrivatePrivate : number +>0 : 0 + + void base.PublicPublic; +>void base.PublicPublic : undefined +>base.PublicPublic : number +>base : Base +>PublicPublic : number + + void base.PublicProtected; +>void base.PublicProtected : undefined +>base.PublicProtected : number +>base : Base +>PublicProtected : number + + void base.PublicPrivate; +>void base.PublicPrivate : undefined +>base.PublicPrivate : number +>base : Base +>PublicPrivate : number + + void base.ProtectedPublic; +>void base.ProtectedPublic : undefined +>base.ProtectedPublic : number +>base : Base +>ProtectedPublic : number + + void base.ProtectedProtected; +>void base.ProtectedProtected : undefined +>base.ProtectedProtected : number +>base : Base +>ProtectedProtected : number + + void base.ProtectedPrivate; +>void base.ProtectedPrivate : undefined +>base.ProtectedPrivate : number +>base : Base +>ProtectedPrivate : number + + void base.PrivatePublic; +>void base.PrivatePublic : undefined +>base.PrivatePublic : number +>base : Base +>PrivatePublic : number + + void base.PrivateProtected; +>void base.PrivateProtected : undefined +>base.PrivateProtected : number +>base : Base +>PrivateProtected : number + + void base.PrivatePrivate; +>void base.PrivatePrivate : undefined +>base.PrivatePrivate : number +>base : Base +>PrivatePrivate : number + + base.PublicPublic += 0; +>base.PublicPublic += 0 : number +>base.PublicPublic : number +>base : Base +>PublicPublic : number +>0 : 0 + + base.PublicProtected += 0; +>base.PublicProtected += 0 : number +>base.PublicProtected : number +>base : Base +>PublicProtected : number +>0 : 0 + + base.PublicPrivate += 0; +>base.PublicPrivate += 0 : number +>base.PublicPrivate : number +>base : Base +>PublicPrivate : number +>0 : 0 + + base.ProtectedPublic += 0; +>base.ProtectedPublic += 0 : number +>base.ProtectedPublic : number +>base : Base +>ProtectedPublic : number +>0 : 0 + + base.ProtectedProtected += 0; +>base.ProtectedProtected += 0 : number +>base.ProtectedProtected : number +>base : Base +>ProtectedProtected : number +>0 : 0 + + base.ProtectedPrivate += 0; +>base.ProtectedPrivate += 0 : number +>base.ProtectedPrivate : number +>base : Base +>ProtectedPrivate : number +>0 : 0 + + base.PrivatePublic += 0; +>base.PrivatePublic += 0 : number +>base.PrivatePublic : number +>base : Base +>PrivatePublic : number +>0 : 0 + + base.PrivateProtected += 0; +>base.PrivateProtected += 0 : number +>base.PrivateProtected : number +>base : Base +>PrivateProtected : number +>0 : 0 + + base.PrivatePrivate += 0; +>base.PrivatePrivate += 0 : number +>base.PrivatePrivate : number +>base : Base +>PrivatePrivate : number +>0 : 0 + + deriv.PublicPublic = 0; +>deriv.PublicPublic = 0 : 0 +>deriv.PublicPublic : number +>deriv : Derived +>PublicPublic : number +>0 : 0 + + deriv.PublicProtected = 0; +>deriv.PublicProtected = 0 : 0 +>deriv.PublicProtected : number +>deriv : Derived +>PublicProtected : number +>0 : 0 + + deriv.PublicPrivate = 0; +>deriv.PublicPrivate = 0 : 0 +>deriv.PublicPrivate : number +>deriv : Derived +>PublicPrivate : number +>0 : 0 + + deriv.ProtectedPublic = 0; +>deriv.ProtectedPublic = 0 : 0 +>deriv.ProtectedPublic : number +>deriv : Derived +>ProtectedPublic : number +>0 : 0 + + deriv.ProtectedProtected = 0; +>deriv.ProtectedProtected = 0 : 0 +>deriv.ProtectedProtected : number +>deriv : Derived +>ProtectedProtected : number +>0 : 0 + + deriv.ProtectedPrivate = 0; +>deriv.ProtectedPrivate = 0 : 0 +>deriv.ProtectedPrivate : number +>deriv : Derived +>ProtectedPrivate : number +>0 : 0 + + deriv.PrivatePublic = 0; +>deriv.PrivatePublic = 0 : 0 +>deriv.PrivatePublic : number +>deriv : Derived +>PrivatePublic : number +>0 : 0 + + deriv.PrivateProtected = 0; +>deriv.PrivateProtected = 0 : 0 +>deriv.PrivateProtected : number +>deriv : Derived +>PrivateProtected : number +>0 : 0 + + deriv.PrivatePrivate = 0; +>deriv.PrivatePrivate = 0 : 0 +>deriv.PrivatePrivate : number +>deriv : Derived +>PrivatePrivate : number +>0 : 0 + + void deriv.PublicPublic; +>void deriv.PublicPublic : undefined +>deriv.PublicPublic : number +>deriv : Derived +>PublicPublic : number + + void deriv.PublicProtected; +>void deriv.PublicProtected : undefined +>deriv.PublicProtected : number +>deriv : Derived +>PublicProtected : number + + void deriv.PublicPrivate; +>void deriv.PublicPrivate : undefined +>deriv.PublicPrivate : number +>deriv : Derived +>PublicPrivate : number + + void deriv.ProtectedPublic; +>void deriv.ProtectedPublic : undefined +>deriv.ProtectedPublic : number +>deriv : Derived +>ProtectedPublic : number + + void deriv.ProtectedProtected; +>void deriv.ProtectedProtected : undefined +>deriv.ProtectedProtected : number +>deriv : Derived +>ProtectedProtected : number + + void deriv.ProtectedPrivate; +>void deriv.ProtectedPrivate : undefined +>deriv.ProtectedPrivate : number +>deriv : Derived +>ProtectedPrivate : number + + void deriv.PrivatePublic; +>void deriv.PrivatePublic : undefined +>deriv.PrivatePublic : number +>deriv : Derived +>PrivatePublic : number + + void deriv.PrivateProtected; +>void deriv.PrivateProtected : undefined +>deriv.PrivateProtected : number +>deriv : Derived +>PrivateProtected : number + + void deriv.PrivatePrivate; +>void deriv.PrivatePrivate : undefined +>deriv.PrivatePrivate : number +>deriv : Derived +>PrivatePrivate : number + + deriv.PublicPublic += 0; +>deriv.PublicPublic += 0 : number +>deriv.PublicPublic : number +>deriv : Derived +>PublicPublic : number +>0 : 0 + + deriv.PublicProtected += 0; +>deriv.PublicProtected += 0 : number +>deriv.PublicProtected : number +>deriv : Derived +>PublicProtected : number +>0 : 0 + + deriv.PublicPrivate += 0; +>deriv.PublicPrivate += 0 : number +>deriv.PublicPrivate : number +>deriv : Derived +>PublicPrivate : number +>0 : 0 + + deriv.ProtectedPublic += 0; +>deriv.ProtectedPublic += 0 : number +>deriv.ProtectedPublic : number +>deriv : Derived +>ProtectedPublic : number +>0 : 0 + + deriv.ProtectedProtected += 0; +>deriv.ProtectedProtected += 0 : number +>deriv.ProtectedProtected : number +>deriv : Derived +>ProtectedProtected : number +>0 : 0 + + deriv.ProtectedPrivate += 0; +>deriv.ProtectedPrivate += 0 : number +>deriv.ProtectedPrivate : number +>deriv : Derived +>ProtectedPrivate : number +>0 : 0 + + deriv.PrivatePublic += 0; +>deriv.PrivatePublic += 0 : number +>deriv.PrivatePublic : number +>deriv : Derived +>PrivatePublic : number +>0 : 0 + + deriv.PrivateProtected += 0; +>deriv.PrivateProtected += 0 : number +>deriv.PrivateProtected : number +>deriv : Derived +>PrivateProtected : number +>0 : 0 + + deriv.PrivatePrivate += 0; +>deriv.PrivatePrivate += 0 : number +>deriv.PrivatePrivate : number +>deriv : Derived +>PrivatePrivate : number +>0 : 0 +} + diff --git a/tests/baselines/reference/getAndSetNotIdenticalType.errors.txt b/tests/baselines/reference/getAndSetNotIdenticalType.errors.txt index a16cbfe7b37a5..9d9b6421af36a 100644 --- a/tests/baselines/reference/getAndSetNotIdenticalType.errors.txt +++ b/tests/baselines/reference/getAndSetNotIdenticalType.errors.txt @@ -1,21 +1,18 @@ tests/cases/compiler/getAndSetNotIdenticalType.ts(2,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType.ts(2,9): error TS2380: 'get' and 'set' accessor must have the same type. +tests/cases/compiler/getAndSetNotIdenticalType.ts(2,9): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type tests/cases/compiler/getAndSetNotIdenticalType.ts(5,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType.ts(5,9): error TS2380: 'get' and 'set' accessor must have the same type. -==== tests/cases/compiler/getAndSetNotIdenticalType.ts (4 errors) ==== +==== tests/cases/compiler/getAndSetNotIdenticalType.ts (3 errors) ==== class C { get x(): number { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. +!!! error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type return 1; } set x(v: string) { } ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. } \ No newline at end of file diff --git a/tests/baselines/reference/getAndSetNotIdenticalType2.errors.txt b/tests/baselines/reference/getAndSetNotIdenticalType2.errors.txt index 2f9c494b9a943..e68552b0bd284 100644 --- a/tests/baselines/reference/getAndSetNotIdenticalType2.errors.txt +++ b/tests/baselines/reference/getAndSetNotIdenticalType2.errors.txt @@ -1,10 +1,11 @@ tests/cases/compiler/getAndSetNotIdenticalType2.ts(5,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType2.ts(5,9): error TS2380: 'get' and 'set' accessor must have the same type. +tests/cases/compiler/getAndSetNotIdenticalType2.ts(5,9): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type tests/cases/compiler/getAndSetNotIdenticalType2.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType2.ts(8,9): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/compiler/getAndSetNotIdenticalType2.ts(9,9): error TS2322: Type 'A' is not assignable to type 'A'. Type 'string' is not assignable to type 'T'. 'T' could be instantiated with an arbitrary type which could be unrelated to 'string'. +tests/cases/compiler/getAndSetNotIdenticalType2.ts(15,1): error TS2322: Type 'A' is not assignable to type 'A'. + Type 'unknown' is not assignable to type 'string'. ==== tests/cases/compiler/getAndSetNotIdenticalType2.ts (5 errors) ==== @@ -16,14 +17,12 @@ tests/cases/compiler/getAndSetNotIdenticalType2.ts(9,9): error TS2322: Type 'A) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. this.data = v; ~~~~~~~~~ !!! error TS2322: Type 'A' is not assignable to type 'A'. @@ -34,4 +33,7 @@ tests/cases/compiler/getAndSetNotIdenticalType2.ts(9,9): error TS2322: Type 'A' is not assignable to type 'A'. +!!! error TS2322: Type 'unknown' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/getAndSetNotIdenticalType2.types b/tests/baselines/reference/getAndSetNotIdenticalType2.types index b5d4705fd6bc4..d7d903cfe5f8d 100644 --- a/tests/baselines/reference/getAndSetNotIdenticalType2.types +++ b/tests/baselines/reference/getAndSetNotIdenticalType2.types @@ -43,8 +43,8 @@ var r = x.x; x.x = r; >x.x = r : A ->x.x : A +>x.x : A >x : C ->x : A +>x : A >r : A diff --git a/tests/baselines/reference/getAndSetNotIdenticalType3.errors.txt b/tests/baselines/reference/getAndSetNotIdenticalType3.errors.txt index 3fb17d65a400b..821b7e2163311 100644 --- a/tests/baselines/reference/getAndSetNotIdenticalType3.errors.txt +++ b/tests/baselines/reference/getAndSetNotIdenticalType3.errors.txt @@ -1,9 +1,10 @@ tests/cases/compiler/getAndSetNotIdenticalType3.ts(5,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType3.ts(5,9): error TS2380: 'get' and 'set' accessor must have the same type. +tests/cases/compiler/getAndSetNotIdenticalType3.ts(5,9): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type tests/cases/compiler/getAndSetNotIdenticalType3.ts(8,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/getAndSetNotIdenticalType3.ts(8,9): error TS2380: 'get' and 'set' accessor must have the same type. tests/cases/compiler/getAndSetNotIdenticalType3.ts(9,9): error TS2322: Type 'A' is not assignable to type 'A'. Type 'string' is not assignable to type 'number'. +tests/cases/compiler/getAndSetNotIdenticalType3.ts(15,1): error TS2322: Type 'A' is not assignable to type 'A'. + Type 'number' is not assignable to type 'string'. ==== tests/cases/compiler/getAndSetNotIdenticalType3.ts (5 errors) ==== @@ -15,14 +16,12 @@ tests/cases/compiler/getAndSetNotIdenticalType3.ts(9,9): error TS2322: Type 'A) { ~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. - ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. this.data = v; ~~~~~~~~~ !!! error TS2322: Type 'A' is not assignable to type 'A'. @@ -32,4 +31,7 @@ tests/cases/compiler/getAndSetNotIdenticalType3.ts(9,9): error TS2322: Type 'A' is not assignable to type 'A'. +!!! error TS2322: Type 'number' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/getAndSetNotIdenticalType3.types b/tests/baselines/reference/getAndSetNotIdenticalType3.types index e5722f57393fb..45ecfa6a485d5 100644 --- a/tests/baselines/reference/getAndSetNotIdenticalType3.types +++ b/tests/baselines/reference/getAndSetNotIdenticalType3.types @@ -43,8 +43,8 @@ var r = x.x; x.x = r; >x.x = r : A ->x.x : A +>x.x : A >x : C ->x : A +>x : A >r : A diff --git a/tests/baselines/reference/gettersAndSettersAccessibility.errors.txt b/tests/baselines/reference/gettersAndSettersAccessibility.errors.txt index faccaab8fdfc2..038b374aaebfc 100644 --- a/tests/baselines/reference/gettersAndSettersAccessibility.errors.txt +++ b/tests/baselines/reference/gettersAndSettersAccessibility.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/gettersAndSettersAccessibility.ts(2,14): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/gettersAndSettersAccessibility.ts(2,14): error TS2379: Getter and setter accessors do not agree in visibility. +tests/cases/compiler/gettersAndSettersAccessibility.ts(2,14): error TS2798: A get accessor must be at least as accessible as the setter tests/cases/compiler/gettersAndSettersAccessibility.ts(3,13): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/gettersAndSettersAccessibility.ts(3,13): error TS2379: Getter and setter accessors do not agree in visibility. +tests/cases/compiler/gettersAndSettersAccessibility.ts(3,13): error TS2798: A get accessor must be at least as accessible as the setter ==== tests/cases/compiler/gettersAndSettersAccessibility.ts (4 errors) ==== @@ -10,11 +10,11 @@ tests/cases/compiler/gettersAndSettersAccessibility.ts(3,13): error TS2379: Gett ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. +!!! error TS2798: A get accessor must be at least as accessible as the setter public set Baz(n:number) {} // error - accessors do not agree in visibility ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. +!!! error TS2798: A get accessor must be at least as accessible as the setter } \ No newline at end of file diff --git a/tests/baselines/reference/gettersAndSettersErrors.errors.txt b/tests/baselines/reference/gettersAndSettersErrors.errors.txt index 013e195876e86..1fd841a796161 100644 --- a/tests/baselines/reference/gettersAndSettersErrors.errors.txt +++ b/tests/baselines/reference/gettersAndSettersErrors.errors.txt @@ -5,9 +5,9 @@ tests/cases/compiler/gettersAndSettersErrors.ts(5,12): error TS2717: Subsequent tests/cases/compiler/gettersAndSettersErrors.ts(6,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(7,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS2379: Getter and setter accessors do not agree in visibility. +tests/cases/compiler/gettersAndSettersErrors.ts(11,17): error TS2798: A get accessor must be at least as accessible as the setter tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. -tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and setter accessors do not agree in visibility. +tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2798: A get accessor must be at least as accessible as the setter ==== tests/cases/compiler/gettersAndSettersErrors.ts (10 errors) ==== @@ -38,12 +38,12 @@ tests/cases/compiler/gettersAndSettersErrors.ts(12,16): error TS2379: Getter and ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. +!!! error TS2798: A get accessor must be at least as accessible as the setter public set Baz(n:number) {} // error - accessors do not agree in visibility ~~~ !!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. +!!! error TS2798: A get accessor must be at least as accessible as the setter } diff --git a/tests/baselines/reference/instancePropertiesInheritedIntoClassType.errors.txt b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.errors.txt index e7584c3d831a8..bbe4984571f31 100644 --- a/tests/baselines/reference/instancePropertiesInheritedIntoClassType.errors.txt +++ b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.errors.txt @@ -4,11 +4,13 @@ tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIn Type 'Number' has no call signatures. tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts(26,13): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts(29,13): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts(40,5): error TS2322: Type 'string' is not assignable to type 'U'. + 'U' could be instantiated with an arbitrary type which could be unrelated to 'string'. tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts(41,16): error TS6234: This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures. -==== tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts (6 errors) ==== +==== tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIntoClassType.ts (7 errors) ==== module NonGeneric { class C { x: string; @@ -60,6 +62,9 @@ tests/cases/conformance/classes/members/classTypes/instancePropertiesInheritedIn var r2 = r.x; var r3 = r.y; r.y = ''; + ~~~ +!!! error TS2322: Type 'string' is not assignable to type 'U'. +!!! error TS2322: 'U' could be instantiated with an arbitrary type which could be unrelated to 'string'. var r6 = d.y(); // error ~ !!! error TS6234: This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? diff --git a/tests/baselines/reference/instancePropertiesInheritedIntoClassType.types b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.types index c39aa38303459..047c2d8032968 100644 --- a/tests/baselines/reference/instancePropertiesInheritedIntoClassType.types +++ b/tests/baselines/reference/instancePropertiesInheritedIntoClassType.types @@ -135,9 +135,9 @@ module Generic { r.y = ''; >r.y = '' : "" ->r.y : string +>r.y : U >r : D ->y : string +>y : U >'' : "" var r6 = d.y(); // error diff --git a/tests/baselines/reference/instancePropertyInClassType.errors.txt b/tests/baselines/reference/instancePropertyInClassType.errors.txt index 224290a4c001b..0ec5f44c9be68 100644 --- a/tests/baselines/reference/instancePropertyInClassType.errors.txt +++ b/tests/baselines/reference/instancePropertyInClassType.errors.txt @@ -4,11 +4,13 @@ tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.t Type 'Number' has no call signatures. tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts(24,13): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts(27,13): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher. +tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts(36,5): error TS2322: Type 'string' is not assignable to type 'U'. + 'U' could be instantiated with an arbitrary type which could be unrelated to 'string'. tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts(37,16): error TS6234: This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? Type 'String' has no call signatures. -==== tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts (6 errors) ==== +==== tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.ts (7 errors) ==== module NonGeneric { class C { x: string; @@ -56,6 +58,9 @@ tests/cases/conformance/classes/members/classTypes/instancePropertyInClassType.t var r2 = r.x; var r3 = r.y; r.y = ''; + ~~~ +!!! error TS2322: Type 'string' is not assignable to type 'U'. +!!! error TS2322: 'U' could be instantiated with an arbitrary type which could be unrelated to 'string'. var r6 = c.y(); // error ~ !!! error TS6234: This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'? diff --git a/tests/baselines/reference/instancePropertyInClassType.types b/tests/baselines/reference/instancePropertyInClassType.types index 36c04c5aa1a18..96a22e233b724 100644 --- a/tests/baselines/reference/instancePropertyInClassType.types +++ b/tests/baselines/reference/instancePropertyInClassType.types @@ -125,9 +125,9 @@ module Generic { r.y = ''; >r.y = '' : "" ->r.y : string +>r.y : U >r : C ->y : string +>y : U >'' : "" var r6 = c.y(); // error diff --git a/tests/baselines/reference/jsdocAccessibilityTags.errors.txt b/tests/baselines/reference/jsdocAccessibilityTags.errors.txt index bcbad8b95eaf2..2edc3816d24b2 100644 --- a/tests/baselines/reference/jsdocAccessibilityTags.errors.txt +++ b/tests/baselines/reference/jsdocAccessibilityTags.errors.txt @@ -1,5 +1,3 @@ -tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(21,9): error TS2379: Getter and setter accessors do not agree in visibility. -tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(23,9): error TS2379: Getter and setter accessors do not agree in visibility. tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(50,14): error TS2341: Property 'priv' is private and only accessible within class 'A'. tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(55,14): error TS2341: Property 'priv2' is private and only accessible within class 'C'. tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(58,9): error TS2341: Property 'priv' is private and only accessible within class 'A'. @@ -12,7 +10,7 @@ tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(61,9): error TS2341: Prop tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(61,25): error TS2445: Property 'prot2' is protected and only accessible within class 'C' and its subclasses. -==== tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js (12 errors) ==== +==== tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js (10 errors) ==== class A { /** * Ap docs @@ -34,12 +32,8 @@ tests/cases/conformance/jsdoc/jsdocAccessibilityTag.js(61,25): error TS2445: Pro pub = 6; /** @public */ get ack() { return this.priv } - ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. /** @private */ set ack(value) { } - ~~~ -!!! error TS2379: Getter and setter accessors do not agree in visibility. } class C { constructor() { diff --git a/tests/baselines/reference/objectLiteralErrors.errors.txt b/tests/baselines/reference/objectLiteralErrors.errors.txt index fa97ae0ddf406..2a6114ed0957e 100644 --- a/tests/baselines/reference/objectLiteralErrors.errors.txt +++ b/tests/baselines/reference/objectLiteralErrors.errors.txt @@ -71,14 +71,12 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(38,26) tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,13): error TS2300: Duplicate identifier 'a'. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,46): error TS1119: An object literal cannot have property and accessor with the same name. tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(39,46): error TS2300: Duplicate identifier 'a'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(42,16): error TS2380: 'get' and 'set' accessor must have the same type. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(42,47): error TS2380: 'get' and 'set' accessor must have the same type. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(42,16): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(43,22): error TS2322: Type 'number' is not assignable to type 'string'. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,16): error TS2380: 'get' and 'set' accessor must have the same type. -tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,55): error TS2380: 'get' and 'set' accessor must have the same type. +tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,16): error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type -==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (78 errors) ==== +==== tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts (76 errors) ==== // Multiple properties with the same name var e1 = { a: 0, a: 0 }; ~ @@ -268,15 +266,11 @@ tests/cases/conformance/expressions/objectLiterals/objectLiteralErrors.ts(44,55) // Get and set accessor with mismatched type annotations var g1 = { get a(): number { return 4; }, set a(n: string) { } }; ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. - ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. +!!! error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type var g2 = { get a() { return 4; }, set a(n: string) { } }; ~~~~~~~~~ !!! error TS2322: Type 'number' is not assignable to type 'string'. var g3 = { get a(): number { return undefined; }, set a(n: string) { } }; ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. - ~ -!!! error TS2380: 'get' and 'set' accessor must have the same type. +!!! error TS2380: The return type of a 'get' accessor must be assignable to its 'set' accessor type \ No newline at end of file diff --git a/tests/baselines/reference/objectSpreadNegative.errors.txt b/tests/baselines/reference/objectSpreadNegative.errors.txt index 397e7e134e00b..639753fbbb1df 100644 --- a/tests/baselines/reference/objectSpreadNegative.errors.txt +++ b/tests/baselines/reference/objectSpreadNegative.errors.txt @@ -22,12 +22,11 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(52,20): error TS269 tests/cases/conformance/types/spread/objectSpreadNegative.ts(54,19): error TS2698: Spread types may only be created from object types. tests/cases/conformance/types/spread/objectSpreadNegative.ts(59,1): error TS2349: This expression is not callable. Type '{}' has no call signatures. -tests/cases/conformance/types/spread/objectSpreadNegative.ts(63,1): error TS2322: Type '12' is not assignable to type 'undefined'. tests/cases/conformance/types/spread/objectSpreadNegative.ts(69,9): error TS2339: Property 'm' does not exist on type '{ p: number; }'. tests/cases/conformance/types/spread/objectSpreadNegative.ts(74,11): error TS2339: Property 'a' does not exist on type '{}'. -==== tests/cases/conformance/types/spread/objectSpreadNegative.ts (23 errors) ==== +==== tests/cases/conformance/types/spread/objectSpreadNegative.ts (22 errors) ==== let o = { a: 1, b: 'no' } /// private propagates @@ -145,8 +144,6 @@ tests/cases/conformance/types/spread/objectSpreadNegative.ts(74,11): error TS233 // write-only properties get skipped let setterOnly = { ...{ set b (bad: number) { } } }; setterOnly.b = 12; // error, 'b' does not exist - ~~~~~~~~~~~~ -!!! error TS2322: Type '12' is not assignable to type 'undefined'. // methods are skipped because they aren't enumerable class C { p = 1; m() { } } diff --git a/tests/baselines/reference/objectSpreadNegative.types b/tests/baselines/reference/objectSpreadNegative.types index a9f0a0f0774f7..dd792723421ed 100644 --- a/tests/baselines/reference/objectSpreadNegative.types +++ b/tests/baselines/reference/objectSpreadNegative.types @@ -288,9 +288,9 @@ let setterOnly = { ...{ set b (bad: number) { } } }; setterOnly.b = 12; // error, 'b' does not exist >setterOnly.b = 12 : 12 ->setterOnly.b : undefined +>setterOnly.b : number >setterOnly : { b: undefined; } ->b : undefined +>b : number >12 : 12 // methods are skipped because they aren't enumerable diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt b/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt index c44ec084989b9..e7e77530b1c0c 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.errors.txt @@ -1,4 +1,6 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(3,5): error TS18022: A method cannot be named with a private identifier. +tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(22,1): error TS2322: Type 'number' is not assignable to type 'T'. + 'T' could be instantiated with an arbitrary type which could be unrelated to 'number'. tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(24,3): error TS18013: Property '#foo' is not accessible outside class 'C' because it has a private identifier. tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts(25,1): error TS2322: Type 'C' is not assignable to type 'C'. Type 'string' is not assignable to type 'number'. @@ -6,7 +8,7 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClass Type 'number' is not assignable to type 'string'. -==== tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts (4 errors) ==== +==== tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClasses-2.ts (5 errors) ==== class C { #foo: T; #bar(): T { @@ -31,6 +33,9 @@ tests/cases/conformance/classes/members/privateNames/privateNamesAndGenericClass let b = new C("hello"); a.baz = 5 // OK + ~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'T'. +!!! error TS2322: 'T' could be instantiated with an arbitrary type which could be unrelated to 'number'. const x: number = a.baz // OK a.#foo; // Error ~~~~ diff --git a/tests/baselines/reference/privateNamesAndGenericClasses-2.types b/tests/baselines/reference/privateNamesAndGenericClasses-2.types index 42f5b237d06fa..d9ce992505e3a 100644 --- a/tests/baselines/reference/privateNamesAndGenericClasses-2.types +++ b/tests/baselines/reference/privateNamesAndGenericClasses-2.types @@ -62,9 +62,9 @@ let b = new C("hello"); a.baz = 5 // OK >a.baz = 5 : 5 ->a.baz : number +>a.baz : T >a : C ->baz : number +>baz : T >5 : 5 const x: number = a.baz // OK diff --git a/tests/cases/compiler/divergentAccessors1.ts b/tests/cases/compiler/divergentAccessors1.ts new file mode 100644 index 0000000000000..909554b2dc256 --- /dev/null +++ b/tests/cases/compiler/divergentAccessors1.ts @@ -0,0 +1,5 @@ +// @strict: true + +class Base { + public +} \ No newline at end of file diff --git a/tests/cases/compiler/divergentAccessorsTypes1.ts b/tests/cases/compiler/divergentAccessorsTypes1.ts new file mode 100644 index 0000000000000..4c8ddacec1cff --- /dev/null +++ b/tests/cases/compiler/divergentAccessorsTypes1.ts @@ -0,0 +1,66 @@ +// @strict: true + + +class Test1 { + get foo(): string { return "" } + set foo(s: string | number) { + let a = s as string; + let b = s as number; + } + + get bar(): string | number { return "" } + set bar(s: string | number | boolean) { + } +} + +interface Test2 { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); +} + +type Test3 = { + get foo(): string; + set foo(s: string | number); + + get bar(): string | number; + set bar(s: string | number | boolean); +}; + +{ + const t = new Test1(); + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} + +{ + const t = {} as Test2; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} + +{ + const t = {} as Test3; + t.foo = 32; + let m: string = t.foo; + + // See how CFA interacts with out-of-type writes + t.bar = 42; + let n: number = t.bar; + t.bar = false; + let o = t.bar; +} \ No newline at end of file diff --git a/tests/cases/compiler/divergentAccessorsVisibility1.ts b/tests/cases/compiler/divergentAccessorsVisibility1.ts new file mode 100644 index 0000000000000..f9e61dbb72a82 --- /dev/null +++ b/tests/cases/compiler/divergentAccessorsVisibility1.ts @@ -0,0 +1,159 @@ +// @strict: true + +class Base { + get PublicPublic() { return 0; } + set PublicPublic(v) { return; } + + get PublicProtected() { return 0; } + protected set PublicProtected(v) { return; } + + get PublicPrivate() { return 0; } + private set PublicPrivate(v) { return; } + + protected get ProtectedPublic() { return 0; } + set ProtectedPublic(v) { return; } + + protected get ProtectedProtected() { return 0; } + protected set ProtectedProtected(v) { return; } + + protected get ProtectedPrivate() { return 0; } + private set ProtectedPrivate(v) { return; } + + private get PrivatePublic() { return 0; } + set PrivatePublic(v) { return; } + + private get PrivateProtected() { return 0; } + protected set PrivateProtected(v) { return; } + + private get PrivatePrivate() { return 0; } + private set PrivatePrivate(v) { return; } + + test() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + } +} + +class Derived extends Base { + test2() { + this.PublicPublic = 0; + this.PublicProtected = 0; + this.PublicPrivate = 0; + this.ProtectedPublic = 0; + this.ProtectedProtected = 0; + this.ProtectedPrivate = 0; + this.PrivatePublic = 0; + this.PrivateProtected = 0; + this.PrivatePrivate = 0; + + void this.PublicPublic; + void this.PublicProtected; + void this.PublicPrivate; + void this.ProtectedPublic; + void this.ProtectedProtected; + void this.ProtectedPrivate; + void this.PrivatePublic; + void this.PrivateProtected; + void this.PrivatePrivate; + + this.PublicPublic += 0; + this.PublicProtected += 0; + this.PublicPrivate += 0; + this.ProtectedPublic += 0; + this.ProtectedProtected += 0; + this.ProtectedPrivate += 0; + this.PrivatePublic += 0; + this.PrivateProtected += 0; + this.PrivatePrivate += 0; + } +} + +declare const base: Base, deriv: Derived; +function fn() { + base.PublicPublic = 0; + base.PublicProtected = 0; + base.PublicPrivate = 0; + base.ProtectedPublic = 0; + base.ProtectedProtected = 0; + base.ProtectedPrivate = 0; + base.PrivatePublic = 0; + base.PrivateProtected = 0; + base.PrivatePrivate = 0; + + void base.PublicPublic; + void base.PublicProtected; + void base.PublicPrivate; + void base.ProtectedPublic; + void base.ProtectedProtected; + void base.ProtectedPrivate; + void base.PrivatePublic; + void base.PrivateProtected; + void base.PrivatePrivate; + + base.PublicPublic += 0; + base.PublicProtected += 0; + base.PublicPrivate += 0; + base.ProtectedPublic += 0; + base.ProtectedProtected += 0; + base.ProtectedPrivate += 0; + base.PrivatePublic += 0; + base.PrivateProtected += 0; + base.PrivatePrivate += 0; + + deriv.PublicPublic = 0; + deriv.PublicProtected = 0; + deriv.PublicPrivate = 0; + deriv.ProtectedPublic = 0; + deriv.ProtectedProtected = 0; + deriv.ProtectedPrivate = 0; + deriv.PrivatePublic = 0; + deriv.PrivateProtected = 0; + deriv.PrivatePrivate = 0; + + void deriv.PublicPublic; + void deriv.PublicProtected; + void deriv.PublicPrivate; + void deriv.ProtectedPublic; + void deriv.ProtectedProtected; + void deriv.ProtectedPrivate; + void deriv.PrivatePublic; + void deriv.PrivateProtected; + void deriv.PrivatePrivate; + + deriv.PublicPublic += 0; + deriv.PublicProtected += 0; + deriv.PublicPrivate += 0; + deriv.ProtectedPublic += 0; + deriv.ProtectedProtected += 0; + deriv.ProtectedPrivate += 0; + deriv.PrivatePublic += 0; + deriv.PrivateProtected += 0; + deriv.PrivatePrivate += 0; +} diff --git a/tests/cases/fourslash/incrementalResolveAccessor.ts b/tests/cases/fourslash/incrementalResolveAccessor.ts index 810c0db143803..456b7e3a69278 100644 --- a/tests/cases/fourslash/incrementalResolveAccessor.ts +++ b/tests/cases/fourslash/incrementalResolveAccessor.ts @@ -16,4 +16,4 @@ verify.quickInfoAt("1", "var b: string"); // TypeCheck -verify.numberOfErrorsInCurrentFile(3); \ No newline at end of file +verify.numberOfErrorsInCurrentFile(2); \ No newline at end of file