Skip to content

Java class library additions for ParparVM (split from #5980) - #6044

Open
shai-almog wants to merge 40 commits into
masterfrom
java-api-additions
Open

shai-almog wants to merge 40 commits into
masterfrom
java-api-additions

Conversation

@shai-almog

Copy link
Copy Markdown
Collaborator

Split out of #5980 so the class library can be reviewed and merged on its own. The desktop compatibility layer will rebase onto this.

What is in it

  • Pure-logic JDK API in vm/JavaAPI, mirrored as compile stubs in Ports/CLDC11: java.util.function, java.util.stream, java.time (temporal, chrono, format), java.text, collections, java.util.concurrent, non-file java.io streams, readers and writers, java.lang additions, MessageDigest/SecureRandom, java.nio.charset, UUID.
  • A narrow com.codename1.impl.JdkHost, installed by the ParparVM ports, offering only what those classes cannot do alone. Each member is justified in the class comment:
    • EDT-safe blocking through invokeAndBlock
    • logging a task that threw
    • random bytes and digests
    • locale number symbols
  • String regex members are rewritten in every build, on every target, to com.codename1.util.regex.StringRegex. That covers matches, both split overloads, replaceAll and replaceFirst, called directly or through a method reference. There is now one engine everywhere. Previously matches was not rewritten at all, and the old fallback engine silently treated a bad pattern as literal text. The rule is unconditional by design; see the comment on BytecodeCompliance.createInvocationRewriteRules, which is guarded by tests.
  • Translator and runtime support for the above (natives, JS bindings, record lowering).
  • Tests:
    • Bulk HotSpot-vs-ParparVM conformance checks.
    • theStringRegexRewriteIsUnconditional and everyRegexMemberOfStringIsRewritten.
    • Device-level matches/split cases in hellocodenameone's StringApiTest.

Deliberately not in it

  • No class loaders, modules or ServiceLoader.
  • File, java.nio.file, java.util.prefs, java.util.logging, URL and ResourceBundle are unchanged from master. They will follow as declarations plus build-time rewrites onto Codename One APIs (FileSystemStorage, Preferences, Log), so each behaves the same on every target.

Verified locally

  • JavaAPI, the translator and the full maven install build.
  • BulkConformanceIntegrationTest, JavascriptRuntimeSemanticsTest, CldcJavaApiParityTest and BytecodeComplianceTest pass.
  • SpotBugs reports zero findings on every gated module.
  • The cast-semantics, control-character, @author and @since gates pass.

🤖 Generated with Claude Code

shai-almog and others added 4 commits October 17, 2026 15:07
java.util.function, java.util.stream, java.time, java.text, collections,
java.util.concurrent, non-file java.io streams, java.lang members,
MessageDigest/SecureRandom, charsets and UUID. Host-backed APIs (files,
nio.file, prefs, logging, URL, resource bundles, service loader, modules)
are left as on master. JdkHost is a narrow internal hook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CoreJdkHost serves the EDT waits, log, secure random, digests and locale
number symbols; JavaSE and Android carry a copy of JdkHost for the core.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ibrary

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review 🔄 Running since 2026-10-21T01:13:21.477607Z 1fc02a9 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Developer Guide build artifacts are available for download from this workflow run:

Developer Guide quality checks:

  • AsciiDoc linter: No issues found (report)
  • Vale: No alerts found (report)
  • Paragraph capitalization: No paragraph capitalization issues (report)
  • LanguageTool: No grammar matches (report)
  • Image references: No unused images detected (report)

@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 12 screenshots: 12 matched.
✅ JavaSE simulator integration screenshots matched stored baselines.

@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 170 screenshots: 170 matched.

Native Android coverage

  • 📊 Line coverage: 16.02% (26015/162399 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 14.38% (122254/850297), branch 9.91% (8470/85441), complexity 7.82% (6529/83503), method 11.60% (4650/40094), class 19.80% (961/4853)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • com.codename1.androidcompat.rt.com.codename1.androidcompat.rt.TextXmlPullParser – 0.00% (0/623 lines covered)
      • com.codename1.androidcompat.androidx.constraintlayout.core.widgets.com.codename1.androidcompat.androidx.constraintlayout.core.widgets.Flow – 0.00% (0/576 lines covered)

✅ Native Android screenshot tests passed.

Native Android coverage

  • 📊 Line coverage: 16.02% (26015/162399 lines covered) [HTML preview] (artifact android-coverage-report, jacocoAndroidReport/html/index.html)
    • Other counters: instruction 14.38% (122254/850297), branch 9.91% (8470/85441), complexity 7.82% (6529/83503), method 11.60% (4650/40094), class 19.80% (961/4853)
    • Lowest covered classes
      • kotlin.collections.kotlin.collections.ArraysKt___ArraysKt – 0.00% (0/6367 lines covered)
      • kotlin.collections.unsigned.kotlin.collections.unsigned.UArraysKt___UArraysKt – 0.00% (0/2384 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.ClassReader – 0.00% (0/1524 lines covered)
      • org.jacoco.agent.rt.internal_0e20598.asm.org.jacoco.agent.rt.internal_0e20598.asm.MethodWriter – 0.00% (0/922 lines covered)
      • kotlin.sequences.kotlin.sequences.SequencesKt___SequencesKt – 0.00% (0/736 lines covered)
      • com.google.common.cache.com.google.common.cache.LocalCache$Segment – 0.00% (0/726 lines covered)
      • okio.okio.Buffer – 0.00% (0/687 lines covered)
      • kotlin.text.kotlin.text.StringsKt___StringsKt – 0.00% (0/625 lines covered)
      • com.codename1.androidcompat.rt.com.codename1.androidcompat.rt.TextXmlPullParser – 0.00% (0/623 lines covered)
      • com.codename1.androidcompat.androidx.constraintlayout.core.widgets.com.codename1.androidcompat.androidx.constraintlayout.core.widgets.Flow – 0.00% (0/576 lines covered)

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend scalar fallback (no native SIMD)
SIMD int-add (64K x300) java 180ms / native 140ms = 1.2x speedup
SIMD float-mul (64K x300) java 137ms / native 145ms = 0.9x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path gated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode 82.000 ms
Base64 CN1 decode 83.000 ms
Base64 native encode 390.000 ms
Base64 encode ratio (CN1/native) 0.210x (79.0% faster)
Base64 native decode 270.000 ms
Base64 decode ratio (CN1/native) 0.307x (69.3% faster)
Image encode benchmark status skipped (SIMD unsupported)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2f94e2d35f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CodenameOne/src/com/codename1/impl/CoreJdkHost.java Outdated
Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/FutureTask.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/Delays.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/FutureTask.java Outdated
@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 206 screenshots: 206 matched.
✅ JavaScript-port screenshot tests passed.

shai-almog and others added 2 commits October 17, 2026 19:51
- No object serialization: ObjectInput, ObjectOutput and Externalizable are
  back to master's empty interfaces in vm/JavaAPI and gone from Ports/CLDC11.
- Concurrency reads one monotonic clock (BlockingWait.now, System.nanoTime)
  for every deadline and delay, so a wall-clock change cannot fire a timed
  wait or a scheduled task early or late.
- A positive timeout under a millisecond is rounded up instead of being
  due immediately (BlockingWait.millis), at every timed call site.
- FutureTask consumes the runner's interrupt only when cancel(true)
  delivered it; cancel(false) leaves the thread's status alone.
- Character: the unassigned Greek code points are not letters.
- CoreJdkHost finds the locale's separators between any script's decimal
  digits, not only ASCII ones.
- Bulk checks: sub-millisecond timed get, cancel(false) interrupt status.
- CI: copyright exclusions for the Harmony/OpenJDK-derived classes, the
  backend javadoc run no longer documents the class library's internal
  com.codename1.impl, CodeQL no longer resolves the JDK's SecureRandom to
  the device class library's copy, and the flutter-bench size overlay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 185 screenshots: 185 matched.
Native Windows port (x64 / Intel-AMD): full hellocodenameone screenshot suite rendered offscreen with Direct2D/DirectWrite, plus the real benchmarks (base64 native/CN1/SIMD, image createMask/applyMask/modifyAlpha/PNG/JPEG, SSE2 SIMD kernels). Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 56ms / native 5ms = 11.2x speedup
SIMD float-mul (64K x300) java 62ms / native 5ms = 12.4x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 native bridge unavailable (CN1 + SIMD + image benchmarks only)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path gated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode 75.000 ms
Base64 CN1 decode 104.000 ms
Base64 SIMD encode 122.000 ms
Base64 encode ratio (SIMD/CN1) 1.627x (62.7% slower)
Base64 SIMD decode 103.000 ms
Base64 decode ratio (SIMD/CN1) 0.990x (1.0% faster)
Image encode benchmark iterations 100
Image createMask (SIMD off) 13.000 ms
Image createMask (SIMD on) 5.000 ms
Image createMask ratio (SIMD on/off) 0.385x (61.5% faster)
Image applyMask (SIMD off) 44.000 ms
Image applyMask (SIMD on) 53.000 ms
Image applyMask ratio (SIMD on/off) 1.205x (20.5% slower)
Image modifyAlpha (SIMD off) 60.000 ms
Image modifyAlpha (SIMD on) 10.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.167x (83.3% faster)
Image modifyAlpha removeColor (SIMD off) 29.000 ms
Image modifyAlpha removeColor (SIMD on) 28.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.966x (3.4% faster)

ParparVM vs HotSpot (JDK 25): Windows x64

Runner CPU: AMD64 Family 25 Model 1 Stepping 1, AuthenticAMD (baseline windows-x64@amd64-family-25-model-1-authenticamd)

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 15% (time) / 15% (RAM) away from its baseline in vm/selfhost/perf-baseline/ fails: above it is a regression, below it an improvement that has to be rebaselined (a row whose calibration runs were noisier carries a wider tolerance), and for RAM the change must also exceed 0.05x in absolute terms. Both run unpinned on all of the runner's CPUs, with their own default thread counts.

Benchmark Cores Time RAM Status
hello (WinHelloMain) 4 1.41x (base 1.22x, +15.4%) 0.76x (base 0.94x, -19.4%) ok
translator (self) 4 0.56x (base 0.60x, -7.3%) 0.62x (base 0.54x, +15.0%) ok
intArithmetic 4 1.19x (base 1.10x, +8.0%) 0.06x (base 0.06x, +6.5%) ok
longArithmetic 4 1.08x (base 1.08x, -0.1%) 0.06x (base 0.05x, +2.5%) ok
mathTranscendental 4 0.77x (base 0.79x, -2.2%) 0.06x (base 0.06x, +1.7%) ok
arraySequential 4 1.32x (base 1.36x, -3.4%) 0.39x (base 0.39x, +0.2%) ok
arrayRandom 4 0.98x (base 1.06x, -7.7%) 0.23x (base 0.23x, +0.4%) ok
objectAllocation 4 1.52x (base 1.56x, -2.2%) 0.40x (base 0.39x, +4.6%) ok
valueEscape 4 0.10x (base 0.10x, +0.4%) 0.04x (base 0.04x, +0.5%) ok
hashMapChurn 4 1.74x (base 1.80x, -3.4%) 0.10x (base 0.09x, +4.5%) ok
stringBuilding 4 1.31x (base 1.22x, +8.0%) 0.27x (base 0.32x, -16.7%) ok
recursion 4 1.49x (base 1.49x, -0.3%) 0.06x (base 0.06x, +0.4%) ok
quicksort 4 1.14x (base 1.13x, +0.2%) 0.12x (base 0.12x, +0.5%) ok

Result: no regression

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Flutter vs Codename One

Same 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.

android

9 interleaved rounds; host load 0.55, 1.52, 1.2

Metric Codename One Flutter Ratio Winner
Installed size 78.2 MB 95.8 MB 1.23x Codename One
Executable code 4.6 MB 20.6 MB 4.43x Codename One
Download size (zipped) 78.2 MB 95.8 MB 1.23x Codename One
Cold start to first frame on screen 350 ms 1234 ms 3.38x Codename One
Memory at rest 44.7 MB 78.6 MB 1.75x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 60 ms 124 ms 2.07x
longArithmetic 36 ms 36 ms 1.00x
mathTranscendental 167 ms 206 ms 1.23x
arraySequential 17 ms 22 ms 1.29x
arrayRandom 186 ms 211 ms 1.13x
objectAllocation 59 ms 26 ms 0.44x
valueEscape 8 ms 5 ms 0.62x
hashMapChurn 95 ms 187 ms 1.97x
stringBuilding 59 ms 80 ms 1.36x
recursion 45 ms 175 ms 3.89x
quicksortBench 119 ms 120 ms 1.01x
Geometric mean 1.24x

Gate: within tolerance against scripts/flutter-bench/baseline.

Android sizes are for the arm64-v8a slice a phone is delivered, on both sides; Flutter's release apk carries three ABIs and would otherwise count its engine about three times.
Android start-up and memory come from an x86_64 emulator with a software GPU. They compare the two runtimes on one machine; they are not phone timings, and a renderer that leans on the GPU is penalised more there.
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

ios

9 interleaved rounds; host load 33.52, 34.97, 27.95

Metric Codename One Flutter Ratio Winner
Installed size 107.9 MB 110.5 MB 1.02x Codename One
Executable code 16.9 MB 19.1 MB 1.13x Codename One
Download size (zipped) 79.9 MB 81.9 MB 1.02x Codename One
Cold start to first frame on screen -- -- -- not measured
Memory at rest -- -- -- not measured

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

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 scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -8.86%; Installed size -1.50%; Download size (zipped) -0.74% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6044 --reason "<why these moved>" baseline-ios.json, then commit the overlay it writes.

iOS start-up and memory are not measured here: Flutter cannot AOT-compile for the simulator, so a simulator run would time a JIT debug build against a release build. Sizes come from release device bundles; timings need signed hardware.
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

javascript

9 interleaved rounds; host load 2.75, 1.69, 0.73

Metric Codename One Flutter Ratio Winner
Installed size 103.8 MB 122.5 MB 1.18x Codename One
Executable code 12.7 MB 25.2 MB 1.98x Codename One
Download size (zipped) 76.3 MB 84.1 MB 1.10x Codename One
Cold start to first frame on screen -- -- -- not measured
Memory at rest -- -- -- not measured

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 719 ms wrong result Flutter: wrong result
longArithmetic 5276 ms did not run Flutter: did not run
mathTranscendental 585 ms did not run Flutter: did not run
arraySequential 242 ms 90 ms 0.37x
arrayRandom 1011 ms wrong result Flutter: wrong result
objectAllocation 38 ms 29 ms 0.76x
valueEscape 163 ms 8 ms 0.05x
hashMapChurn 1101 ms 253 ms 0.23x
stringBuilding 488 ms 111 ms 0.23x
recursion 506 ms 513 ms 1.01x
quicksortBench 521 ms wrong result Flutter: wrong result
Geometric mean 0.30x

Gate: within tolerance against scripts/flutter-bench/baseline; BEHIND FLUTTER on Compute (geomean of the VM workloads) (reported, not gated: a loss to Flutter on the web is currently accepted).

the JavaScript adapter needs a Chrome DevTools driver; sizes are reported and timings are not
This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

linux

9 interleaved rounds; host load 0.27, 2.91, 2.49

Metric Codename One Flutter Ratio Winner
Installed size 111.1 MB 143.8 MB 1.29x Codename One
Executable code 13.9 MB 16.1 MB 1.16x Codename One
Download size (zipped) 80.8 MB 92.9 MB 1.15x Codename One
Cold start to first frame on screen 154 ms 245 ms 1.60x Codename One
Memory at rest 83.4 MB 226.2 MB 2.72x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 74 ms 183 ms 2.47x
longArithmetic 56 ms 56 ms 1.00x
mathTranscendental 254 ms 276 ms 1.09x
arraySequential 16 ms 35 ms 2.19x
arrayRandom 266 ms 271 ms 1.02x
objectAllocation 24 ms 38 ms 1.58x
valueEscape 5 ms 7 ms 1.40x
hashMapChurn 48 ms 336 ms 7.00x
stringBuilding 33 ms 111 ms 3.36x
recursion 95 ms 258 ms 2.72x
quicksortBench 139 ms 149 ms 1.07x
Geometric mean 1.86x

Gate: OUTSIDE THE BASELINE against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Download size (zipped) -0.01% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6044 --reason "<why these moved>" baseline-linux.json, then commit the overlay it writes.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

macos

9 interleaved rounds; host load 9.13, 19.66, 22.47

Metric Codename One Flutter Ratio Winner
Installed size 123.7 MB 139.4 MB 1.13x Codename One
Executable code 32.6 MB 47.9 MB 1.47x Codename One
Download size (zipped) 85.4 MB 93.3 MB 1.09x Codename One
Cold start to first frame on screen 545 ms 690 ms 1.36x Codename One
Memory at rest 36.6 MB 56.5 MB 1.54x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 8 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 127 ms 264 ms 2.08x
longArithmetic 87 ms 69 ms 0.79x
mathTranscendental 334 ms 336 ms 1.01x
arraySequential 13 ms 44 ms 3.38x
arrayRandom 342 ms 334 ms 0.98x
objectAllocation 81 ms 28 ms 0.35x
valueEscape 6 ms 14 ms 2.33x
hashMapChurn 40 ms 263 ms 6.58x
stringBuilding 28 ms 133 ms 4.75x
recursion 141 ms 293 ms 2.08x
quicksortBench 146 ms 140 ms 0.96x
Geometric mean 1.67x

Gate: within tolerance against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -7.73%; Installed size -2.16%; Download size (zipped) -1.31% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6044 --reason "<why these moved>" baseline-macos.json, then commit the overlay it writes.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

windows

9 interleaved rounds

Metric Codename One Flutter Ratio Winner
Installed size 107.5 MB 121.1 MB 1.13x Codename One
Executable code 11.2 MB 14.1 MB 1.26x Codename One
Download size (zipped) 77.8 MB 86.4 MB 1.11x Codename One
Cold start to first frame on screen 158 ms 245 ms 1.54x Codename One
Memory at rest 58.0 MB 92.6 MB 1.60x Codename One

Start-up and memory at rest are judged round by round: the ratio is the median of the per-round ratios, each from two launches made back to back, and the times and sizes shown are each side's median, so the ratio need not equal their quotient. Codename One was ahead in 9 of 9 rounds on cold start to first frame on screen; 9 of 9 rounds on memory at rest.

Compute -- the VM workloads (vm/benchmarks), run inside each app; time is the best of the app's own repetitions, higher ratio means Codename One is faster.

Workload Codename One Flutter Ratio
intArithmetic 80 ms 235 ms 2.94x
longArithmetic 59 ms 66 ms 1.12x
mathTranscendental 211 ms 250 ms 1.19x
arraySequential 16 ms 40 ms 2.50x
arrayRandom 246 ms 296 ms 1.20x
objectAllocation 32 ms 43 ms 1.34x
valueEscape 1 ms 13 ms 13.00x
hashMapChurn 43 ms 303 ms 7.05x
stringBuilding 33 ms 130 ms 3.94x
recursion 203 ms 206 ms 1.01x
quicksortBench 157 ms 152 ms 0.97x
Geometric mean 2.19x

Gate: within tolerance against scripts/flutter-bench/baseline. Smaller than its baseline, which does not fail the gate: Executable code -11.70%; Installed size -1.37%; Download size (zipped) -0.89% -- rebaseline to tighten. To accept the move, download this platform's baseline-<platform>.json artifact and run python3 scripts/flutter-bench/flutter_baseline.py calibrate --pr 6044 --reason "<why these moved>" baseline-windows.json, then commit the overlay it writes.

This platform's adapter has not been exercised end to end before; treat the first published run as the thing under review.

Codename One wins 26 of 26 measured metrics across 6 platform(s).

@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 00c805346b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/time/Duration.java Outdated
Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/lang/Math.java
Comment thread vm/JavaAPI/src/java/lang/Math.java
Comment thread vm/JavaAPI/src/java/util/concurrent/ScheduledPool.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/ScheduledPool.java
Comment thread vm/JavaAPI/src/java/io/PrintWriter.java
Comment thread CodenameOne/src/com/codename1/util/regex/Matcher.java
@github-actions

Copy link
Copy Markdown
Contributor

Cloudflare Preview

- Duration.dividedBy is exact past 292 years: the magnitude is divided as
  an unsigned 128-bit number when the nanosecond count overflows a long.
- Character: the unassigned CJK compatibility code points are not letters.
- Math.scalb's clamp counts all 53 (24) significand bits, so an extreme
  negative factor underflows to a signed zero; cbrt scales subnormals.
- ScheduledPool saturates a fixed rate's next deadline and consumes only
  the interrupt cancel(true) delivered.
- PrintWriter.checkError reports a wrapped PrintWriter's failure.
- Matcher stays exhausted after a zero-width match at the region end.
- Bulk checks for each, and MatcherExhaustionTest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cb506da229

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/Executors.java Outdated
Comment thread vm/ByteCodeTranslator/src/nativeMethods.m
Comment thread vm/JavaAPI/src/java/lang/Math.java Outdated
Comment thread vm/JavaAPI/src/java/lang/String.java Outdated
@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 185 screenshots: 185 matched.
Native Windows port, REAL shipping pipeline: the hellocodenameone screenshot suite rendered by a binary CROSS-COMPILED on Linux (clang-cl + xwin, WebView2 linked) and RUN on a Windows x64 runner. Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 63ms / native 4ms = 15.7x speedup
SIMD float-mul (64K x300) java 56ms / native 6ms = 9.3x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 native bridge unavailable (CN1 + SIMD + image benchmarks only)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path gated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode 74.000 ms
Base64 CN1 decode 102.000 ms
Base64 SIMD encode 139.000 ms
Base64 encode ratio (SIMD/CN1) 1.878x (87.8% slower)
Base64 SIMD decode 120.000 ms
Base64 decode ratio (SIMD/CN1) 1.176x (17.6% slower)
Image encode benchmark iterations 100
Image createMask (SIMD off) 11.000 ms
Image createMask (SIMD on) 5.000 ms
Image createMask ratio (SIMD on/off) 0.455x (54.5% faster)
Image applyMask (SIMD off) 25.000 ms
Image applyMask (SIMD on) 34.000 ms
Image applyMask ratio (SIMD on/off) 1.360x (36.0% slower)
Image modifyAlpha (SIMD off) 26.000 ms
Image modifyAlpha (SIMD on) 23.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.885x (11.5% faster)
Image modifyAlpha removeColor (SIMD off) 39.000 ms
Image modifyAlpha removeColor (SIMD on) 15.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.385x (61.5% faster)

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

✅ Continuous Quality Report

Test & Coverage

  • ❌ Tests: 7905 total, 1 failed, 0 skipped
  • ⚠️ Coverage report not generated.

Static Analysis

  • SpotBugs [Report archive]
    • ✅ ios: 0 findings (no issues)
  • ⚠️ PMD report not generated.
  • ⚠️ Checkstyle report not generated.

Generated automatically by the PR CI workflow.

@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 185 screenshots: 185 matched.
Native Windows port (arm64 / Apple Silicon - Arm): full hellocodenameone screenshot suite rendered offscreen with Direct2D/DirectWrite, plus the real benchmarks (base64 native/CN1/SIMD, image createMask/applyMask/modifyAlpha/PNG/JPEG, NEON SIMD kernels). Compared against the in-repo baseline in scripts/windows/screenshots.

Benchmark Results

Detailed Performance Metrics

Metric Duration
SIMD kernel backend SSE2 (x64) / NEON (arm64) native kernels
SIMD int-add (64K x300) java 49ms / native 3ms = 16.3x speedup
SIMD float-mul (64K x300) java 48ms / native 2ms = 24.0x speedup
SIMD kernel correctness PASS (native result == scalar reference)
Base64 native bridge unavailable (CN1 + SIMD + image benchmarks only)
Base64 payload size 8192 bytes
Base64 benchmark iterations 6000
Base64 SIMD byte path gated to scalar (CPU autovectorizes scalar; explicit SIMD not beneficial here)
Base64 CN1 encode 59.000 ms
Base64 CN1 decode 70.000 ms
Base64 SIMD encode 78.000 ms
Base64 encode ratio (SIMD/CN1) 1.322x (32.2% slower)
Base64 SIMD decode 72.000 ms
Base64 decode ratio (SIMD/CN1) 1.029x (2.9% slower)
Image encode benchmark iterations 100
Image createMask (SIMD off) 5.000 ms
Image createMask (SIMD on) 3.000 ms
Image createMask ratio (SIMD on/off) 0.600x (40.0% faster)
Image applyMask (SIMD off) 19.000 ms
Image applyMask (SIMD on) 19.000 ms
Image applyMask ratio (SIMD on/off) 1.000x (0.0% slower)
Image modifyAlpha (SIMD off) 16.000 ms
Image modifyAlpha (SIMD on) 12.000 ms
Image modifyAlpha ratio (SIMD on/off) 0.750x (25.0% faster)
Image modifyAlpha removeColor (SIMD off) 22.000 ms
Image modifyAlpha removeColor (SIMD on) 14.000 ms
Image modifyAlpha removeColor ratio (SIMD on/off) 0.636x (36.4% faster)

ParparVM vs HotSpot (JDK 25): Windows arm64

Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline windows-arm64@armv8-64-bit-family-8-model-d49-microsoft-corporation)

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 15% (time) / 15% (RAM) away from its baseline in vm/selfhost/perf-baseline/ fails: above it is a regression, below it an improvement that has to be rebaselined (a row whose calibration runs were noisier carries a wider tolerance), and for RAM the change must also exceed 0.05x in absolute terms. Both run unpinned on all of the runner's CPUs, with their own default thread counts.

Benchmark Cores Time RAM Status
hello (WinHelloMain) 4 1.02x (base 1.11x, -8.0%) 0.77x (base 0.75x, +2.5%) ok
translator (self) 4 0.89x (base 0.84x, +5.9%) 0.49x (base 0.51x, -3.1%) ok
intArithmetic 4 1.04x (base 1.04x, +0.0%) 0.06x (base 0.06x, +2.8%) ok
longArithmetic 4 0.79x (base 0.80x, -0.1%) 0.06x (base 0.06x, +3.2%) ok
mathTranscendental 4 0.70x (base 0.72x, -2.1%) 0.06x (base 0.06x, +1.4%) ok
arraySequential 4 0.39x (base 0.46x, -14.1%) 0.39x (base 0.39x, +0.1%) ok
arrayRandom 4 0.94x (base 0.94x, +0.3%) 0.23x (base 0.23x, +0.3%) ok
objectAllocation 4 1.74x (base 2.81x, -38.1%) 0.41x (base 0.43x, -5.4%) ok
valueEscape 4 0.76x (base 0.76x, +0.1%) 0.05x (base 0.05x, +2.9%) ok
hashMapChurn 4 0.99x (base 0.98x, +0.4%) 0.11x (base 0.12x, -8.6%) ok
stringBuilding 4 1.60x (base 1.43x, +12.3%) 0.27x (base 0.27x, -0.2%) ok
recursion 4 1.45x (base 1.46x, -1.0%) 0.07x (base 0.07x, +1.1%) ok
quicksort 4 1.01x (base 1.00x, +0.9%) 0.12x (base 0.12x, +0.6%) ok

Result: no regression

@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 185 screenshots: 185 matched.
Native Linux port (x64), GTK3/Cairo/Pango, ParparVM bytecode-to-C (no JVM): the hellocodenameone screenshot suite rendered by a native ELF built + run on the GitHub x64 runner. Baseline: scripts/linux/screenshots.

ParparVM vs HotSpot (JDK 25): Linux x64

Runner CPU: AMD EPYC 9V74 80-Core Processor (baseline linux-x64@amd-epyc-9v74-80-core-processor)

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 15% (time) / 15% (RAM) away from its baseline in vm/selfhost/perf-baseline/ fails: above it is a regression, below it an improvement that has to be rebaselined (a row whose calibration runs were noisier carries a wider tolerance), and for RAM the change must also exceed 0.05x in absolute terms. Both run unpinned on all of the runner's CPUs, with their own default thread counts.

Benchmark Cores Time RAM Status
hello (LinuxHelloMain) 4 0.83x (base 0.90x, -7.4%) 0.80x (base 0.96x, -16.1%) ok
translator (self) 4 0.57x (base 0.63x, -8.8%) 0.46x (base 0.46x, -0.1%) ok
intArithmetic 4 1.10x (base 1.10x, -0.0%) 0.08x (base 0.06x, +38.9%) ok
longArithmetic 4 1.08x (base 1.08x, +0.0%) 0.07x (base 0.06x, +34.8%) ok
mathTranscendental 4 1.09x (base 1.09x, -0.6%) 0.08x (base 0.07x, +13.1%) ok
arraySequential 4 2.75x (base 2.81x, -2.2%) 0.36x (base 0.35x, +1.7%) ok
arrayRandom 4 1.03x (base 1.02x, +0.9%) 0.21x (base 0.21x, +2.3%) ok
objectAllocation 4 1.21x (base 1.21x, -0.1%) 0.35x (base 0.39x, -11.0%) ok
valueEscape 4 0.10x (base 0.10x, +0.6%) 0.04x (base 0.06x, -23.9%) ok
hashMapChurn 4 1.42x (base 1.10x, +29.8%) 0.09x (base 0.10x, -7.9%) ok
stringBuilding 4 1.42x (base 1.49x, -4.6%) 0.26x (base 0.26x, +0.3%) ok
recursion 4 1.14x (base 1.24x, -8.5%) 0.06x (base 0.06x, +3.8%) ok
quicksort 4 1.10x (base 1.07x, +3.0%) 0.11x (base 0.11x, +1.5%) ok

Result: no regression

@shai-almog

shai-almog commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Compared 185 screenshots: 185 matched.
Native Linux port (arm64), GTK3/Cairo/Pango, ParparVM bytecode-to-C (no JVM): the hellocodenameone screenshot suite rendered by a native ELF built + run on the GitHub arm64 runner. Baseline: scripts/linux/screenshots-arm.

ParparVM vs HotSpot (JDK 25): Linux arm64

Runner CPU: Neoverse-N2 (baseline linux-arm64@neoverse-n2)

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 15% (time) / 15% (RAM) away from its baseline in vm/selfhost/perf-baseline/ fails: above it is a regression, below it an improvement that has to be rebaselined (a row whose calibration runs were noisier carries a wider tolerance), and for RAM the change must also exceed 0.05x in absolute terms. Both run unpinned on all of the runner's CPUs, with their own default thread counts.

Benchmark Cores Time RAM Status
hello (LinuxHelloMain) 4 0.94x (base 1.02x, -7.5%) 0.77x (base 0.93x, -17.7%) ok
translator (self) 4 0.75x (base 0.70x, +8.1%) 0.43x (base 0.43x, -0.3%) ok
intArithmetic 4 1.05x (base 1.04x, +0.0%) 0.03x (base 0.03x, +4.4%) ok
longArithmetic 4 0.79x (base 0.79x, -0.1%) 0.03x (base 0.03x, +5.2%) ok
mathTranscendental 4 1.10x (base 1.10x, +0.1%) 0.04x (base 0.03x, +9.9%) ok
arraySequential 4 0.39x (base 0.36x, +7.5%) 0.37x (base 0.37x, +0.4%) ok
arrayRandom 4 0.94x (base 0.94x, +0.6%) 0.20x (base 0.20x, +0.9%) ok
objectAllocation 4 1.89x (base 1.77x, +6.6%) 0.36x (base 0.38x, -4.7%) ok
valueEscape 4 0.51x (base 0.51x, -0.1%) 0.03x (base 0.03x, +5.8%) ok
hashMapChurn 4 0.84x (base 0.84x, -0.4%) 0.12x (base 0.12x, -3.0%) ok
stringBuilding 4 1.37x (base 1.57x, -12.7%) 0.32x (base 0.26x, +20.6%) ok
recursion 4 1.44x (base 1.43x, +0.8%) 0.04x (base 0.04x, +3.5%) ok
quicksort 4 1.00x (base 0.99x, +0.2%) 0.10x (base 0.09x, +2.9%) ok

Result: no regression

- tanh: Lambert continued fraction for |x| < 1 (within 1.05 ulp).
- String(byte[], int, int, ...): range checked before the native reads it.
- Pool: a worker thread that fails to start gives its slot back.
- Character: CJK extension ranges split at their unassigned gaps.
- Recalibrate the Linux flutter size row and the windows-arm64 hello RAM row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

while (position < length && Character.isDigit(value.charAt(position))) {

P2 Badge Restrict duration syntax to ASCII digits

Character.isDigit() admits non-ASCII numerals and the runtime's numeric parsers accept them, so inputs such as Duration.parse("PT١S") succeed even though ISO-8601 duration syntax and the JDK parser reject them. Check explicitly for '0' through '9' in both the whole-number and fractional scans.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/util/concurrent/CompletableFuture.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/CompletableFuture.java
Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/lang/StringBuffer.java Outdated
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java Outdated
Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/lang/StringBuffer.java Outdated
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java Outdated
Comment thread vm/JavaAPI/src/java/lang/Math.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/ScheduledPool.java
@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

✅ ByteCodeTranslator Quality Report

Test & Coverage

  • ✅ Tests: 834 total, 0 failed, 55 skipped

Benchmark Results

  • Execution Time: 9519 ms

  • Hotspots (Top 20 sampled methods):

    • 7.79% com.codename1.tools.translator.IteratorEscape.mangle (112 samples)
    • 7.23% com.codename1.tools.translator.IteratorEscape.ctorOnlyStoresParamsIntoThis (104 samples)
    • 7.23% java.lang.Object.hashCode (104 samples)
    • 6.68% java.util.ArrayList.indexOf (96 samples)
    • 4.17% java.lang.System.identityHashCode (60 samples)
    • 4.10% com.codename1.tools.translator.BytecodeMethod.equals (59 samples)
    • 2.85% java.lang.StringBuilder.append (41 samples)
    • 1.81% java.util.AbstractCollection.containsAll (26 samples)
    • 1.81% com.codename1.tools.translator.bytecodes.Invoke.findMethodUp (26 samples)
    • 1.74% com.codename1.tools.translator.JavascriptReachability.enqueueResolved (25 samples)
    • 1.74% java.lang.String.equals (25 samples)
    • 1.46% com.codename1.tools.translator.BytecodeMethod.updateInlinableFieldDependencies (21 samples)
    • 1.46% java.util.HashMap.hash (21 samples)
    • 1.46% com.codename1.tools.translator.ByteCodeClass.hasDeclaredMethod (21 samples)
    • 1.32% com.codename1.tools.translator.Parser.cullMethods (19 samples)
    • 1.04% com.codename1.tools.translator.bytecodes.Invoke.resolveDirectTarget (15 samples)
    • 1.04% com.codename1.tools.translator.DeadFieldElimination.run (15 samples)
    • 0.97% java.util.HashMap.putVal (14 samples)
    • 0.97% java.io.FileOutputStream.writeBytes (14 samples)
    • 0.97% java.lang.StringCoding.encode (14 samples)
  • ⚠️ Coverage report not generated.

Static Analysis

  • ✅ SpotBugs: no findings (report was not generated by the build).
  • ⚠️ PMD report not generated.
  • ⚠️ Checkstyle report not generated.

Generated automatically by the PR CI workflow.

…rity

ZoneId.of validates the region syntax of a UTC/GMT/UT-prefixed ID with
no sign; Thread.yield leaves the interrupt status set; COWAL removeAll
and retainAll check for a reentrant change before the nothing-removed
return. The CLDC DateTimeFormatter accepts a leap second only at 23:59,
and the CLDC ScheduledPool.shutdownNow no longer lists an owed fixed-rate
firing twice. Duration.ZERO.addTo(null) stays as JDK 8 has it.
Flutter linux download-size baseline moved by 2 bytes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e8da7e5d07

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/net/URI.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/FutureTask.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/ConcurrentHashMap.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/ConcurrentHashMap.java
…HM views

URI.resolve puts a root slash before a relative path merged onto a base
with an authority and an empty path, so "a" against http://h is
http://h/a, not http://ha. FutureTask.runAndReset releases its runner
even when done() throws. ConcurrentHashMap's values view rejects a null
query and the plain keySet view rejects addAll even for an empty input.
The android-compat test cleanup resets dark mode and refreshes the
configuration, which a test order that ran ResumeConfigurationTest
first left dark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

if (nextChar != '\n') {
continue;

P2 Badge Clear comment state after a leading Unicode escape

When a key begins with a Unicode escape and the next source character is ! or #—for example, \u0061!x=y—this continue skips the logic that clears firstChar. The marker is then treated as a comment opener, so the implementation loads an empty value under a instead of the JDK's a!x key with value y; clear firstChar when the completed escape has contributed content.


if (fraction.length() == 0 || fraction.length() > 9) {
throw invalidDuration(value);

P3 Badge Accept zero-digit duration fractions

When parsing an otherwise valid fractional-seconds section with no digits—for example, Duration.parse("PT1.S")—this explicit empty check rejects it. The Duration grammar allows zero through nine fractional digits, and the JDK parses both PT1.S and PT1,S as one second; rejecting them breaks compatible deserialization of valid duration text, so only reject fractions longer than nine digits.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/net/URI.java
Comment thread vm/JavaAPI/src/java/util/Properties.java Outdated
Comment thread vm/JavaAPI/src/java/util/Properties.java Outdated
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java Outdated
Comment thread vm/JavaAPI/src/java/util/WeakHashMap.java Outdated
shai-almog and others added 2 commits October 20, 2026 04:56
URI rejects a colon in the first segment of a relative path, and a
scheme must start with a letter and may hold "+" and "." (svn+ssh).
DateTimeFormatter parses ZZZZ as the localized GMT offset it prints.
WeakHashMap compares with the queried key's equals. Properties keeps the
empty entry a last line of only a backslash makes. The perf overlay
drops three rows master's pr/6045.json already re-recorded from the same
value, which the baseline gate refuses to see twice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

default V getOrDefault(Object key, V defaultValue) {
V v = get(key);
return v != null ? v : defaultValue;

P2 Badge Distinguish null mappings in getOrDefault

For maps that permit null values, this treats a present mapping to null as absent. For example, after map.put("k", null), map.getOrDefault("k", "fallback") returns "fallback" instead of null, so callers cannot distinguish an explicit null mapping as required by the Map contract. Check containsKey(key) when get(key) returns null before selecting the default.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java Outdated
Comment thread vm/JavaAPI/src/java/util/IntSummaryStatistics.java
Comment thread vm/JavaAPI/src/java/util/concurrent/CompletableFuture.java
Comment thread vm/JavaAPI/src/java/util/ReversedList.java
…ages

OOOO and ZZZZ parse only the full localized offset (GMT+08:00), as the
JDK does. Int/Long/DoubleSummaryStatistics print the JDK's summary. A
CompletableFuture dependent completed by hand skips its action. A
reversed view hands bulk changes to the backing list, so an unmodifiable
one refuses even a no-op. NavigationTest uninstalls its static dispatcher
and LocalContinuityTest clears it: one left behind answered a Form for
any route and made an unknown route restorable. linux-x64
objectAllocation RAM recorded lower.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a13c5c323e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/text/ChoiceFormat.java
Comment thread vm/JavaAPI/src/java/util/concurrent/CompletableFuture.java
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java Outdated
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java
…nth, combined stages

Instant.parse round-trips Instant.MIN/MAX, N/A fields conflict-check
against component fields, a bare Month formats, and thenCombine /
applyToEither skip their action once the dependent is done.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9cfc0c4601

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CodenameOne/src/com/codename1/util/regex/Pattern.java Outdated
Comment thread vm/JavaAPI/src/java/time/format/DateTimeFormatter.java
Comment thread vm/JavaAPI/src/java/util/Spliterators.java
Comment thread vm/JavaAPI/src/java/lang/Character.java Outdated
Comment thread vm/JavaAPI/src/java/util/concurrent/CopyOnWriteArrayList.java
…mic addAllAbsent, script letters

Word boundaries take counted quantifiers, a day-of-year is checked
against the resolved date, the first estimateSize binds a collection
spliterator, addAllAbsent publishes once, and the script letter table
covers its blocks whole. Records the linux Flutter size and the linux
arm64 translator RAM moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e30f5ee0f8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/util/Locale.java
Comment thread vm/JavaAPI/src/java/util/concurrent/ConcurrentHashMap.java
Comment thread vm/JavaAPI/src/java/lang/Runtime.java
Comment thread vm/JavaAPI/src/java/lang/Thread.java
shai-almog and others added 2 commits October 20, 2026 17:08
# Conflicts:
#	maven/android-compat/src/test/java/com/codename1/androidcompat/testing/AndroidTestSupport.java
…Ui check

forLanguageTag reads extended language subtags, ConcurrentHashMap's
entry set writes through on add, and the blockUi conformance check
expects a second blocking wait only when the join really waits.
Records the linux Flutter size and linux x64 translator RAM moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 00fe52783f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/lang/Thread.java
Comment thread vm/JavaAPI/src/java/text/SimpleDateFormat.java
Comment thread vm/JavaAPI/src/java/util/concurrent/Executors.java
Comment thread vm/JavaAPI/src/java/time/temporal/TemporalUnit.java Outdated
shai-almog and others added 2 commits October 20, 2026 20:21
…ppet name clash

TemporalUnit.isSupportedBy probes like the JDK instead of recursing,
DateFormat.parse fails cleanly at a start past the end, and the
Playground's auto-import prefers the one Codename One class when the
device library adds a JDK class of the same name (SecureRandom,
Temporal). Drops seven doc-snippet baseline entries that now run and
records the linux x64 stringBuilding and windows x64 translator moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 011242322e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread vm/JavaAPI/src/java/util/stream/Stream.java
Comment thread vm/JavaAPI/src/java/util/Arrays.java
Comment thread vm/JavaAPI/src/java/lang/Throwable.java
Comment thread vm/JavaAPI/src/java/lang/StringBuffer.java
@shai-almog

Copy link
Copy Markdown
Collaborator Author

@codex review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant