88 Commits

Author SHA1 Message Date
Claridtimo 67119d0be8 GenStreamableTask flatten: model the POST-regen hierarchy for super-call targets
Follow-up to 0f1626ece, found when 85 persisted .board files stopped
deserializing: the ancestor walk reflected on classes compiled from the
STRIPPED sources, but javac binds the emitted super.readObject to the nearest
declaration in the FINAL sources. CargoTank extends Counter extends Prop —
Counter regenerates a method covering `count`, so CargoTank's tail computed
against Prop streamed `count` twice and desynced the stream.

findStreamMethodAncestor now asks willDeclare(): an ancestor counts iff it
declares the method in current source (hand-written / substituted frame) OR
this run will generate one for it (concrete, in-fileset, nonempty own tail —
recursive, memoized; the filesets are pre-scanned so out-of-fileset ancestors
are never assumed generatable). Consequence: a subclass whose tail below the
NEAREST post-regen ancestor is empty generates nothing (CargoTank inherits
Counter's method).

The hand-written-custom skip is also per-SIDE now, not per-class: Prop has a
custom readObject but no writeObject, and its write side must regenerate both
for legacy parity and because subclasses emit super.writeObject against it
(the old whole-class skip left those uncompilable).

Verified: all 165 persisted .board files load with the regenerated streamers;
regen is idempotent (second run converts 0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhfHCXYp2ctWi76Z91y9Ut
2026-07-06 22:34:20 +12:00
Claridtimo 0f1626ecef GenStreamableTask flatten: nested classes, region scoping, ancestor-aware supers
Three structural fixes to flatten mode, found bringing up games on-device
(Epic A1 Phase 5):

1. Nested classes: processFlatten now recurses through getDeclaredClasses()
   (not gated on the outer class's eligibility), so nested Streamables like
   BangConfig.Round get deterministic methods too. All detection/substitution/
   insertion is scoped to each class's own body region (brace-matched,
   comment/string-aware, member-class bodies masked during detection) so an
   instrumented outer class can't hide — or poison — a nested one.

2. Ancestor-aware generation: a class whose ancestor declares read/writeObject
   now generates `super.readObject(ins)` + only the fields declared below that
   ancestor, instead of a self-contained full-set method. A self-contained
   subclass method silently dropped the ancestor's side effects for every
   subclass that previously inherited it: Prop.init() (server NPE cloning
   board props at startRound), Item's _nondb identity extras (itemId=0 on
   every wire-streamed item), InvocationMarshaller's _invdir rebind. Byte
   layout is unchanged: the ancestor's method streams exactly the flattened
   prefix. When the subclass adds no fields, nothing is generated — plain
   inheritance is already complete (the field-free marshaller/unit case).

3. Abstract classes: substitution-only. Their default*Object() pass-throughs
   are replaced in place with the class's own flattened prefix (making them
   safe super-call targets — the reflective pass-through reads the full
   dynamic-class set and would double-read the subclass tail), but whole
   methods are never generated for them. Requires every Streamable ancestor
   to be covered by the task's filesets; see findStreamMethodAncestor doc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhfHCXYp2ctWi76Z91y9Ut
2026-07-06 21:34:05 +12:00
Claridtimo 7cbac80172 Phase 5(b) fix: InvocationMarshaller explicit streaming preserves _invdir
The flatten-mode codegen gave each *Marshaller subclass a self-contained
read/writeObject, which overrode InvocationMarshaller.readObject and thus
skipped its side-effect of binding the transient _invdir from the stream's
client -> null _invdir -> NPE on the first invocation request (hit by ART
AND HotSpot clients). Fix: give InvocationMarshaller explicit read/writeObject
(GenStreamUtil, deterministic order, byte-identical to the old reflective
default) that keeps the _invdir binding; field-free subclasses inherit it.
narya 1.22.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhfHCXYp2ctWi76Z91y9Ut
2026-07-05 22:10:13 +12:00
Claridtimo 9ea7ecf9ee WIP checkpoint: Phase 5(b) narya streamer codegen for ART field-order
Pre-crash safety checkpoint (box rebooted mid-implementation; NOT verified
complete). GenStreamableTask flatten-mode + GenStreamUtil runtime helper +
ObjectInputStream changes; explicit read/writeObject instrumentation across
presents net + dobj event classes so ART matches HotSpot's ClassUtil.getFields
order without the global sort flag (no data migration). narya 1.21.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhfHCXYp2ctWi76Z91y9Ut
2026-07-05 19:56:40 +12:00
Claridtimo 3266a9c163 Bump narya to 1.20 for the Bang TLS work
A clean minor-version bump (retiring the Epic 2 -bangN patched-fork suffix —
that scheme is superseded; we now own these forks outright and version them
normally). GitHub Packages won't let us re-publish 1.19, and 1.20 makes the
TLS-capable build obvious in dependency listings.
2026-06-29 23:31:09 +12:00
Michael Bayne 34bd05060f [maven-release-plugin] prepare release narya-1.19 2026-06-03 10:35:34 -07:00
Michael Bayne f1c1b730a1 [maven-release-plugin] prepare for next development iteration 2026-04-30 13:40:23 -07:00
Michael Bayne 9f4c3dbb54 [maven-release-plugin] prepare release narya-1.18 2026-04-30 13:40:19 -07:00
Ray J. Greenwell cc7193a4f4 Fix tests: add hamcrest jar, make them run headless/no dock icon. 2026-04-27 20:42:39 -07:00
Ray J. Greenwell 5e9f4d5a15 Stop using the old JSR250 annotation.
This will likely break a bunch of things because things further down the
line were depending on narya bringing in this jar.
2026-04-27 15:04:35 -07:00
Ray J. Greenwell 99f797f66a Drive-by: a bit of modernization & warning cleanup, UTF-8 edition. 2026-03-21 15:27:14 -07:00
Michael Bayne 283984464b [maven-release-plugin] prepare for next development iteration 2026-03-09 14:17:16 -07:00
Michael Bayne d930aacc8c [maven-release-plugin] prepare release narya-1.17.4 2026-03-09 14:17:13 -07:00
Michael Bayne 12c617158d [maven-release-plugin] prepare for next development iteration 2026-02-25 12:18:55 -08:00
Ray J. Greenwell 8813f630d6 [maven-release-plugin] prepare release narya-1.17.3 2026-02-25 12:05:53 -08:00
Ray J. Greenwell 376d079272 Suppress this-escape warnings in some tools. 2026-02-20 10:32:53 -08:00
Ray J. Greenwell 7996dc1e61 Fix some deprecation warnings. 2026-02-20 10:32:53 -08:00
Michael Bayne 4b6ec141f3 [maven-release-plugin] prepare for next development iteration 2026-02-11 10:06:30 -08:00
Michael Bayne c1b9ec813c [maven-release-plugin] prepare release narya-1.17.2 2026-02-11 10:06:26 -08:00
Michael Bayne e35740aba7 [maven-release-plugin] prepare for next development iteration 2025-11-13 16:57:17 -08:00
Michael Bayne e78dfd88fd [maven-release-plugin] prepare release narya-1.17.1 2025-11-13 16:57:14 -08:00
Ray J. Greenwell c8996bedf0 Support alternate indent widths for code generation. 2025-09-09 16:05:34 -07:00
Michael Bayne 1361e237ef [maven-release-plugin] prepare for next development iteration 2025-07-04 09:46:01 -07:00
Michael Bayne 6ec6af0f25 [maven-release-plugin] prepare release narya-1.17 2025-07-04 09:45:58 -07:00
Michael Bayne 61fd40f318 Streamline the source header. Update the copyright. 2025-04-03 13:21:33 -07:00
Michael Bayne 1d7365ca32 Merge pull request #3 from threerings/dependabot/maven/tools/junit-junit-4.13.1
Bump junit from 4.10 to 4.13.1 in /tools
2025-04-03 13:13:46 -07:00
dependabot[bot] 3003f15e76 Bump ant from 1.7.1 to 1.10.9 in /tools
Bumps ant from 1.7.1 to 1.10.9.

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-03 19:27:16 +00:00
dependabot[bot] af07592b21 Bump junit from 4.10 to 4.13.1 in /tools
Bumps [junit](https://github.com/junit-team/junit4) from 4.10 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases)
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.10.md)
- [Commits](https://github.com/junit-team/junit4/compare/r4.10...r4.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-13 04:35:18 +00:00
Ray J. Greenwell 5b01edc885 Return to SNAPSHOT development. 2018-09-26 16:22:59 -07:00
Ray J. Greenwell d752f21b9a Prepare for release of 1.16.5. 2018-09-26 16:19:31 -07:00
Ray J. Greenwell 735443f7fc Return to SNAPSHOT development. 2018-09-24 15:30:33 -07:00
Ray J. Greenwell feac5c2f92 Prepare for release of 1.16.4. 2018-09-24 15:20:01 -07:00
Ray J. Greenwell 63ff5753f4 Revert to SNAPSHOT development. 2018-05-09 11:40:54 -07:00
Ray J. Greenwell 35ba8a859a Prepare for release of 1.16.3. 2018-05-09 11:30:58 -07:00
Ray J. Greenwell 8232345096 Return to SNAPSHOT development. 2018-04-03 17:57:50 -07:00
Ray J. Greenwell d56f4d4654 Prepare for release 1.16.2 2018-04-03 17:54:54 -07:00
Ray J. Greenwell 7d02ed1730 Back to SNAPSHOT development. 2018-03-22 16:47:07 -07:00
Ray J. Greenwell fe34b75190 Prepare for release 1.16.1. 2018-03-22 16:42:27 -07:00
Ray J. Greenwell 4456083bcc prepare for next development iteration 2017-12-28 08:48:28 -08:00
Ray J. Greenwell 5a96d9e544 prepare release narya-1.16 2017-12-28 08:41:48 -08:00
Michael Bayne 9c16e724ba Support setting classpath directly. 2015-03-17 08:28:01 -07:00
Michael Bayne 86c5cf7c75 [maven-release-plugin] prepare for next development iteration 2015-03-12 11:46:43 -07:00
Michael Bayne 1dccfa1d58 [maven-release-plugin] prepare release narya-1.15 2015-03-12 11:46:40 -07:00
Michael Bayne 8493c455fb Various javadoc fixes. 2015-03-12 11:41:06 -07:00
Ray J. Greenwell 2740da3abf Oh, was I supposed to subclass and re-assign these statics?
That's a terrible idea. I think 'final' was just forgotten.
2014-10-29 10:08:54 -07:00
Ray J. Greenwell 2290ee3f3d Also do proper cloning so we can be subclassed. 2014-10-29 09:59:51 -07:00
Ray J. Greenwell 8c72823ab1 De-static some bits on ImportSet.
Statics can't be overridden. This class shouldn't have to know
about all threerings projects everywhere.
2014-10-29 09:59:51 -07:00
Michael Bayne 01b4ef9af7 Use latest Javassist. Supports Java 8. 2014-10-20 16:07:31 -07:00
Ray J. Greenwell a1dc0730af Preparing for 1.15-SNAPSHOT development. 2014-04-01 16:40:30 -07:00
Ray J. Greenwell 116e1bdf36 Preparing for narya-parent-1.14.3 release. 2014-04-01 16:34:34 -07:00