Skip to content

Commit b7c156d

Browse files
committed
Merge pull request #6738 from Microsoft/port-6736
ports #6736 into release-1.8
2 parents f3ad8bf + 927c8af commit b7c156d

9 files changed

+171
-1
lines changed

src/compiler/checker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8741,7 +8741,7 @@ namespace ts {
87418741
*/
87428742
function checkClassPropertyAccess(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, type: Type, prop: Symbol): boolean {
87438743
const flags = getDeclarationFlagsFromSymbol(prop);
8744-
const declaringClass = <InterfaceType>getDeclaredTypeOfSymbol(prop.parent);
8744+
const declaringClass = <InterfaceType>getDeclaredTypeOfSymbol(getMergedSymbol(prop.parent));
87458745

87468746
if (left.kind === SyntaxKind.SuperKeyword) {
87478747
const errorNode = node.kind === SyntaxKind.PropertyAccessExpression ?
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [tests/cases/compiler/declarationMerging1.ts] ////
2+
3+
//// [file1.ts]
4+
class A {
5+
protected _f: number;
6+
getF() { return this._f; }
7+
}
8+
9+
//// [file2.ts]
10+
interface A {
11+
run();
12+
}
13+
14+
//// [file1.js]
15+
var A = (function () {
16+
function A() {
17+
}
18+
A.prototype.getF = function () { return this._f; };
19+
return A;
20+
}());
21+
//// [file2.js]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/file1.ts ===
2+
class A {
3+
>A : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
4+
5+
protected _f: number;
6+
>_f : Symbol(_f, Decl(file1.ts, 0, 9))
7+
8+
getF() { return this._f; }
9+
>getF : Symbol(getF, Decl(file1.ts, 1, 25))
10+
>this._f : Symbol(_f, Decl(file1.ts, 0, 9))
11+
>this : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
12+
>_f : Symbol(_f, Decl(file1.ts, 0, 9))
13+
}
14+
15+
=== tests/cases/compiler/file2.ts ===
16+
interface A {
17+
>A : Symbol(A, Decl(file1.ts, 0, 0), Decl(file2.ts, 0, 0))
18+
19+
run();
20+
>run : Symbol(run, Decl(file2.ts, 0, 13))
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/compiler/file1.ts ===
2+
class A {
3+
>A : A
4+
5+
protected _f: number;
6+
>_f : number
7+
8+
getF() { return this._f; }
9+
>getF : () => number
10+
>this._f : number
11+
>this : this
12+
>_f : number
13+
}
14+
15+
=== tests/cases/compiler/file2.ts ===
16+
interface A {
17+
>A : A
18+
19+
run();
20+
>run : () => any
21+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//// [tests/cases/compiler/declarationMerging2.ts] ////
2+
3+
//// [a.ts]
4+
5+
export class A {
6+
protected _f: number;
7+
getF() { return this._f; }
8+
}
9+
10+
//// [b.ts]
11+
export {}
12+
declare module "./a" {
13+
interface A {
14+
run();
15+
}
16+
}
17+
18+
//// [a.js]
19+
define(["require", "exports"], function (require, exports) {
20+
"use strict";
21+
var A = (function () {
22+
function A() {
23+
}
24+
A.prototype.getF = function () { return this._f; };
25+
return A;
26+
}());
27+
exports.A = A;
28+
});
29+
//// [b.js]
30+
define(["require", "exports"], function (require, exports) {
31+
"use strict";
32+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/compiler/a.ts ===
2+
3+
export class A {
4+
>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
5+
6+
protected _f: number;
7+
>_f : Symbol(_f, Decl(a.ts, 1, 16))
8+
9+
getF() { return this._f; }
10+
>getF : Symbol(getF, Decl(a.ts, 2, 25))
11+
>this._f : Symbol(_f, Decl(a.ts, 1, 16))
12+
>this : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
13+
>_f : Symbol(_f, Decl(a.ts, 1, 16))
14+
}
15+
16+
=== tests/cases/compiler/b.ts ===
17+
export {}
18+
declare module "./a" {
19+
interface A {
20+
>A : Symbol(A, Decl(a.ts, 0, 0), Decl(b.ts, 1, 22))
21+
22+
run();
23+
>run : Symbol(run, Decl(b.ts, 2, 17))
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== tests/cases/compiler/a.ts ===
2+
3+
export class A {
4+
>A : A
5+
6+
protected _f: number;
7+
>_f : number
8+
9+
getF() { return this._f; }
10+
>getF : () => number
11+
>this._f : number
12+
>this : this
13+
>_f : number
14+
}
15+
16+
=== tests/cases/compiler/b.ts ===
17+
export {}
18+
declare module "./a" {
19+
interface A {
20+
>A : A
21+
22+
run();
23+
>run : () => any
24+
}
25+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// @filename: file1.ts
2+
class A {
3+
protected _f: number;
4+
getF() { return this._f; }
5+
}
6+
7+
// @filename: file2.ts
8+
interface A {
9+
run();
10+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @module: amd
2+
3+
// @filename: a.ts
4+
export class A {
5+
protected _f: number;
6+
getF() { return this._f; }
7+
}
8+
9+
// @filename: b.ts
10+
export {}
11+
declare module "./a" {
12+
interface A {
13+
run();
14+
}
15+
}

0 commit comments

Comments
 (0)