From 1572849a875632a84bec664b2acb41fee54a72c2 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Sun, 21 Mar 2021 11:32:52 -0700 Subject: [PATCH 2/6] GObject: Don't autogenerate accessors for CONSTRUCT_ONLY properties Since we redefine CONSTRUCT_ONLY properties as readonly data properties when they are set, the autogenerated accessors would be wrong. See: #391 --- installed-tests/js/testGObjectClass.js | 7 +++++++ modules/core/_common.js | 2 ++ 2 files changed, 9 insertions(+) diff --git a/installed-tests/js/testGObjectClass.js b/installed-tests/js/testGObjectClass.js index 4cf3a867..f0a57a84 100644 --- a/installed-tests/js/testGObjectClass.js +++ b/installed-tests/js/testGObjectClass.js @@ -766,6 +766,10 @@ describe('Auto accessor generation', function () { 'Long-named property', GObject.ParamFlags.READWRITE, 0, 100, 48), 'construct': GObject.ParamSpec.int('construct', 'Construct', 'Construct', GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT, 0, 100, 96), + 'construct-only': GObject.ParamSpec.int('construct-only', 'Construct only', + 'Construct-only property', + GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY, + 0, 100, 80), 'snake-name': GObject.ParamSpec.int('snake-name', 'Snake name', 'Snake-cased property', GObject.ParamFlags.READWRITE, 0, 100, 36), 'camel-name': GObject.ParamSpec.int('camel-name', 'Camel name', @@ -844,8 +848,11 @@ describe('Auto accessor generation', function () { it("initial value is the param spec's default value", function () { expect(a.simple).toEqual(24); + expect(a.long_long_name).toEqual(48); + expect(a.longLongName).toEqual(48); expect(a['long-long-name']).toEqual(48); expect(a.construct).toEqual(96); + expect(a.construct_only).toEqual(80); }); it('notify when the property changes', function () { diff --git a/modules/core/_common.js b/modules/core/_common.js index 45bbefb7..edc70215 100644 --- a/modules/core/_common.js +++ b/modules/core/_common.js @@ -59,6 +59,8 @@ function _generateAccessors(pspec, propdesc, GObject) { function _checkAccessors(proto, pspec, GObject) { const {name, flags} = pspec; + if (flags & GObject.ParamFlags.CONSTRUCT_ONLY) + return; const underscoreName = name.replace(/-/g, '_'); const camelName = name.replace(/-([a-z])/g, match => match[1].toUpperCase()); -- 2.30.2