diff --git a/packages/babel-helper-create-class-features-plugin/src/fields.js b/packages/babel-helper-create-class-features-plugin/src/fields.js index 80e1ec1b4002..b3d2ccff0ebd 100644 --- a/packages/babel-helper-create-class-features-plugin/src/fields.js +++ b/packages/babel-helper-create-class-features-plugin/src/fields.js @@ -501,7 +501,9 @@ function replaceThisContext(path, ref, superRef, file, loose) { file, getObjectRef() { state.needsClassRef = true; - return path.node.static ? ref : t.thisExpression(); + return path.node.static + ? ref + : t.memberExpression(ref, t.identifier("prototype")); }, }); replacer.replace(); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/exec.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/exec.js index 9fcc52c26454..63d8fe8cdfe3 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/exec.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/exec.js @@ -1,10 +1,14 @@ class Base { superMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + superMethod() { + return 'bad'; + } + #privateMethod() { return super.superMethod(); } @@ -14,4 +18,4 @@ class Sub extends Base { } } -expect((new Sub()).publicMethod()).toEqual(1017); \ No newline at end of file +expect((new Sub()).publicMethod()).toEqual('good'); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/input.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/input.js index 57879b021e52..d85e01133ac1 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/input.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/input.js @@ -1,10 +1,14 @@ class Base { superMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + superMethod() { + return 'bad'; + } + #privateMethod() { return super.superMethod(); } @@ -12,4 +16,4 @@ class Sub extends Base { publicMethod() { return this.#privateMethod(); } -} \ No newline at end of file +} diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/output.js index b245ccca9f14..f12c62348ca4 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method-loose/super/output.js @@ -1,6 +1,6 @@ class Base { superMethod() { - return 1017; + return 'good'; } } @@ -13,6 +13,10 @@ class Sub extends Base { }); } + superMethod() { + return 'bad'; + } + publicMethod() { return babelHelpers.classPrivateFieldLooseBase(this, _privateMethod)[_privateMethod](); } diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/exec.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/exec.js index 9fcc52c26454..63d8fe8cdfe3 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/exec.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/exec.js @@ -1,10 +1,14 @@ class Base { superMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + superMethod() { + return 'bad'; + } + #privateMethod() { return super.superMethod(); } @@ -14,4 +18,4 @@ class Sub extends Base { } } -expect((new Sub()).publicMethod()).toEqual(1017); \ No newline at end of file +expect((new Sub()).publicMethod()).toEqual('good'); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/input.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/input.js index 57879b021e52..d85e01133ac1 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/input.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/input.js @@ -1,10 +1,14 @@ class Base { superMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + superMethod() { + return 'bad'; + } + #privateMethod() { return super.superMethod(); } @@ -12,4 +16,4 @@ class Sub extends Base { publicMethod() { return this.#privateMethod(); } -} \ No newline at end of file +} diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/output.js index 63878e0e22a4..d934fb365e2f 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-method/super/output.js @@ -1,6 +1,6 @@ class Base { superMethod() { - return 1017; + return 'good'; } } @@ -12,6 +12,10 @@ class Sub extends Base { _privateMethod.add(this); } + superMethod() { + return 'bad'; + } + publicMethod() { return babelHelpers.classPrivateMethodGet(this, _privateMethod, _privateMethod2).call(this); } @@ -21,5 +25,5 @@ class Sub extends Base { var _privateMethod = new WeakSet(); var _privateMethod2 = function _privateMethod2() { - return babelHelpers.get(babelHelpers.getPrototypeOf(this), "superMethod", this).call(this); + return babelHelpers.get(babelHelpers.getPrototypeOf(Sub.prototype), "superMethod", this).call(this); }; diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/exec.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/exec.js index 2793aa6e6026..1d6f0c63559a 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/exec.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/exec.js @@ -1,8 +1,14 @@ class Base { - static basePublicStaticMethod() { return 1017; } + static basePublicStaticMethod() { + return 'good'; + } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static #subStaticPrivateMethod() { return super.basePublicStaticMethod(); } @@ -12,4 +18,4 @@ class Sub extends Base { } } -expect(Sub.check()).toEqual(1017); \ No newline at end of file +expect(Sub.check()).toEqual('good'); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/input.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/input.js index 2a8aba080ffc..e5fb0ecd5eec 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/input.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/input.js @@ -1,8 +1,14 @@ class Base { - static basePublicStaticMethod() { return 1017; } + static basePublicStaticMethod() { + return 'good'; + } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static #subStaticPrivateMethod() { return super.basePublicStaticMethod(); } diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/output.js index 4f6bc3698406..98be96809ba9 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method-loose/super/output.js @@ -1,11 +1,15 @@ class Base { static basePublicStaticMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static check() { babelHelpers.classPrivateFieldLooseBase(Sub, _subStaticPrivateMethod)[_subStaticPrivateMethod](); } diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/exec.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/exec.js index 2793aa6e6026..1d6f0c63559a 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/exec.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/exec.js @@ -1,8 +1,14 @@ class Base { - static basePublicStaticMethod() { return 1017; } + static basePublicStaticMethod() { + return 'good'; + } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static #subStaticPrivateMethod() { return super.basePublicStaticMethod(); } @@ -12,4 +18,4 @@ class Sub extends Base { } } -expect(Sub.check()).toEqual(1017); \ No newline at end of file +expect(Sub.check()).toEqual('good'); diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/input.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/input.js index 2a8aba080ffc..e5fb0ecd5eec 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/input.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/input.js @@ -1,8 +1,14 @@ class Base { - static basePublicStaticMethod() { return 1017; } + static basePublicStaticMethod() { + return 'good'; + } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static #subStaticPrivateMethod() { return super.basePublicStaticMethod(); } diff --git a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/output.js b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/output.js index 156343f956f7..b9cdbb4d24b4 100644 --- a/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/output.js +++ b/packages/babel-plugin-proposal-private-methods/test/fixtures/private-static-method/super/output.js @@ -1,11 +1,15 @@ class Base { static basePublicStaticMethod() { - return 1017; + return 'good'; } } class Sub extends Base { + static basePublicStaticMethod() { + return 'bad'; + } + static check() { babelHelpers.classStaticPrivateMethodGet(Sub, Sub, _subStaticPrivateMethod).call(Sub); }