Repository navigation
javafx-compat and mapping fixes - #6141
shai-almog wants to merge 6 commits into
Conversation
…rvableValue.map, Region.insetsProperty, ImageView fit CSS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…operties Nested class/enum field types were emitted as binary names (Outer$Inner), which javac rejects in source. Properties inherited from a non-@mapped base class were silently dropped by the generated mapper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An HTTP error code is not a crash, so Lifecycle no longer sends the log for it; the simulator's built_by_user prompt is skipped on the EDT or headless. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The default getStorageEntrySize looped until skip() answered -1, but skip() answers 0 at the end of a stream, so an implementation without its own override hung its background thread on the first cached image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n Storage Image downloads a remote URL through ConnectionRequest.downloadImageToStorage, the cache URLImage uses, and tells the views showing it when it arrives. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Label with wrapText on now has a horizontal content bias, a preferred height of its text wrapped at the given width, and a native peer (WrappingLabel) that paints the wrapped lines. VBox, HBox and ScrollPane already ask for height-for-width, so a column of wrapping labels in a fit-to-width scroll pane gets the right height. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
|
Compared 12 screenshots: 12 matched. |
Cloudflare Preview
|
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 231 screenshots: 231 matched. |
Flutter vs Codename OneSame application, built both ways: Flutter's AOT compile of the gallery, and the identical Dart source transpiled to Java on Codename One. Lower is better for every metric, so a ratio above 1.00x means Codename One is ahead by that factor. android9 interleaved rounds; host load 0.76, 1.98, 1.75
Compute -- the VM workloads (
Gate: within tolerance against
ios9 interleaved rounds; host load 32.27, 35.69, 30.52
Compute -- the VM workloads ( Not measured: iOS compute is not measured: a device build needs signed hardware, and on the simulator Flutter runs its JIT debug engine rather than AOT code. The macOS row runs the same ParparVM and Dart AOT compilers on the same Apple silicon. Gate: within tolerance against
javascript9 interleaved rounds; host load 1.91, 1.23, 0.55
Compute -- the VM workloads (
Gate: within tolerance against
linux9 interleaved rounds; host load 0.31, 3.11, 2.78
Compute -- the VM workloads (
Gate: within tolerance against
macos9 interleaved rounds; host load 6.56, 20.41, 25.29
Compute -- the VM workloads (
Gate: within tolerance against
windows9 interleaved rounds
Compute -- the VM workloads (
Gate: within tolerance against
Codename One wins 26 of 26 measured metrics across 6 platform(s). |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 25 Model 17 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 210 screenshots: 210 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 195 screenshots: 195 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 196 screenshots: 196 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
|























Fixes for gaps and bugs found porting a real JavaFX mobile application (JFX Central's mobile module) to the JavaFX compatibility layer.
javafx-compat
ListPropertychange listeners now fire on content changes (old and new value are the list), as in JavaFX.Cell.layoutChildrenno longer setsvisibleon a graphic whose visibility is bound (it threw "A bound value cannot be set").ObservableValue.map,flatMapandorElse.Region.insetsProperty().-fx-fit-width,-fx-fit-height,-fx-preserve-ratiofrom CSS.http:/https:images load in the background throughConnectionRequest.downloadImageToStorage(the Storage cacheURLImageuses); views showing the image repaint and relayout when it arrives.wrapTextwraps aLabelonto several lines: horizontal content bias, height for width, ellipsis-sized minimum width.Mapping processor
Outer$Innerfailed to compile).Core / JavaSE
Lifecycle.handleNetworkErrorsends the log only for a thrown exception, not for an HTTP error code. In the simulator, sending asked for the build account with a modal prompt that blocked the EDT on a plain 404; that prompt is now skipped on the EDT and headless.CodenameOneImplementation.getStorageEntrySizelooped untilskip()returned -1, butskip()returns 0 at end of stream, so it never ended. It now counts withread(). The shipping ports override it; the headless test implementation hung on it.Tests: javafx-compat suite (535 incl. new
PortGapsTest,RemoteImageTest,WrapTextTest), build-engine mapping processor tests (two new). SpotBugs zero for javafx-compat, build-engine, android, ios and core-unittests locally.Not covered: wrapping for buttons, checkboxes and cells;
lineSpacing,textOverrun,ellipsisString.🤖 Generated with Claude Code