feat(fls): read and write a project's own applications as their beans

A project's own applications (classes under projekt/anwendungen, installed
on a host) are no longer left out. The decoder now keeps the Java type of
every primitive — at setters, constructor and call arguments, also through
shared ids like Integer0 — and which properties an object's own getter
made. beanCapture.ts turns a decoded bean back into what the writer writes,
with the node's system software as a mark the writer replaces by the
system software it writes; what the format cannot say is refused, not
guessed (an unresolved value, a Field, a factory-made object, an object a
getter reaches elsewhere in the file). The reader keeps own applications as
captured beans; the corpus no longer warns.

The capture first took a setter with another object's getter result for an
own getter; the round-trip test found it. The Java oracle did not show
whether an application runs on its node's system software, so a mutation
writing the mark instead survived; it now reports onItsSystem (true for all
192 applications of the corpus).

Checked by Java: from the files written again, FILIUS loads Accumulator and
Broadcast installed, switched on and on their node's system software, as
in the original. The round-trip test covers every primitive, null, a
class, an array, shared objects, getter chains, constructed elements, map
reads and static constants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 09:43:16 +00:00
co-authored by Claude Opus 5.5
parent 95c5b7d97b
commit 3548652687
18 changed files with 1444 additions and 404 deletions
+4 -12
View File
@@ -1,16 +1,8 @@
// Warnings the corpus is expected to produce, shared by the corpus tests.
/**
* Two examples install an application of their own, compiled into the
* archive (projekt/anwendungen). Java loads it from there; this reader
* cannot run it — and the Java oracle, reading only konfiguration.xml, does
* not see it either.
* None since the reader keeps a project's own applications as their beans
* (beanCapture.ts); until then the two examples that install one warned
* that it was left out.
*/
export const EXPECTED_WARNINGS: Record<string, string[]> = {
'java-examples/anwendung_komplett.fls': [
"node 1: application filius.software.clientserver.Accumulator is not part of FILIUS (a project's own application), left out",
],
'java-examples/multicast_server.fls': [
"node 1: application filius.software.clientserver.Broadcast is not part of FILIUS (a project's own application), left out",
],
};
export const EXPECTED_WARNINGS: Record<string, string[]> = {};