Repository navigation
Backend: close the gaps found porting BuildCloud (#6153) - #6158
Conversation
…es/consumes, @crossorigin Part of #6153: @column(insertable/updatable), @lob accepted on string and byte fields, CrudRepository delete/deleteAll/saveAll/findAllById/flush and default methods in repository interfaces, consumes/produces on the mapping annotations (415/406), a per-route @crossorigin policy that replaces the global one for its route, and ResponseStatusException(int). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…djusters, BigDecimal, InetAddress (#6153) Item 5 of #6153: classes the backend needed that the ParparVM class library lacked. BigDecimal keeps its unscaled value as decimal digits, since there is no java.math.BigInteger here. InetAddress resolves address literals only; the backend's getaddrinfo lives in its own TCP natives, so other host names throw UnknownHostException. LocalDate gains with(TemporalAdjuster) and implements TemporalAdjuster. JdkGapChecks holds all of them to HotSpot in the bulk conformance run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the shared engine checkBackend now moves java.util.regex onto com.codename1.util.regex (the java/util/regex rows of Relocation.JDK_SHIMS) and rewrites String's regex members to StringRegex (the String rows of the client's rewrite rules), and the regex package (all but REDebugCompiler) is @SharedWithBackend so it ships in codenameone-backend. Issue #6153 item 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…generated codecs The build finds the class literals the application hands to the typed Json methods, writes a codec for each, and the entry point installs a generated registry over them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er reader (#6153 items 6, 7) com.codename1.backend.xml: XmlPullParser (XXE-safe by construction: DOCTYPE skipped, only predefined and numeric entities, nesting capped), XmlElement, PropertyLists (XML plists and the plist inside a signed provisioning profile). com.codename1.backend.ImageInfo: PNG/JPEG/GIF/WebP format and dimensions from the header, JPEG walked segment by segment to its SOFn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…onfigurable table names
Recovery codes are verified through a DelegatingPasswordEncoder: new codes
are {pbkdf2-sha256}, imported {sha256} hex hashes verify in constant time,
and unprefixed hashes stay PBKDF2. Remember-me tokens record user agent and
client address (schema version 12), and repositories list a user's tokens
and revoke one by owner. Every cn1_* table name can be configured through
cn1.security.table.<name> or cn1.security.table-prefix, validated as a
safe SQL identifier.
Refs #6153 (item 9)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…chema to version 12 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…MDC reset, plist dates, registry codecs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 195 screenshots: 195 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
Cloudflare Preview
|
|
Compared 231 screenshots: 231 matched. |
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
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
|
…res never links SecuritySchema 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: |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 210 screenshots: 210 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 7763 64-Core Processor (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. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (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 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 |
…ames ElementCollection can name its owner column and declare the value column's SQL type, which reaches CREATE TABLE and the schema report. A name wrapped in backticks or double quotes is unwrapped, since the runtime quotes every identifier itself and the quotes otherwise became part of the name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 193 screenshots: 193 matched. Benchmark Results
Build and Run Timing
Detailed Performance Metrics
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
XMLParser, Element, ParserCallback and the new CharEntities and XMLParseException are @SharedWithBackend. XMLParser no longer links HTMLUtils (entity tables moved to CharEntities, HTMLUtils delegates) or Log (I/O errors go to the callback as ERROR_IO). Strict mode now refuses malformed input with XMLParseException, caps nesting (setMaxDepth, default 256), skips DOCTYPE internal subsets without expanding them, and defines only the XML entities. Element gains child, children, childText. PropertyLists uses the shared parser; XmlElement, XmlPullParser and XmlException are deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…greSQL names; ICU collation names Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Timestamps, PropertyLists, Credentials, Clock, Http1Date and Asn1 each had their own days-from-civil / civil-from-days / leap-year / pad copy. They now share com.codename1.impl.backend.CivilTime; each keeps its own parsing, separators and error behaviour. Asn1.parseTime now rejects a day past the month's end, as the other parsers already did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tMalformed setStrict(true) again only reports to the callback, as on master, so Mappers.fromXml and callbacks that continue keep working. The new setRejectMalformed(true) implies strict and adds throwing on malformed input, entity refusal, the depth cap and DOCTYPE skipping. It also refuses C0 control characters and &#X, skips comments and PIs in a DOCTYPE internal subset whole, reports line and column, and throws on I/O errors with the IOException as cause. Outside it, an I/O error with no callback is printed rather than lost. PropertyLists uses the new mode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… abort, effective strict flag Line/column tracking and the control-character check run only in reject mode, counted inside the existing text scan, so default and HTML parsing pay one boolean test. Outside reject mode an I/O error is reported to the callback but its answer is ignored, returning the partial tree as master did. setRejectMalformed no longer changes what isStrict reports, and turning it off restores the mode setStrict chose. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Closes #6153: the backend gaps found while porting BuildCloud.
com.codename1.backend.log--Loggerwith{}placeholders, per-loggerlogging.level.*, a per-threadMDCcleared before each request.backend-packagerelocatesjava.util.regexandString's regex members ontocom.codename1.util.regex.Json.read(String, Class),readList,convertandJson.write(dto), through codecs the build generates for every class literal passed to them (bytecode scan) and installs at startup.@Column(insertable/updatable)and@Lob; newCrudRepositorymethods and default repository methods.produces/consumes(415/406, a wildcardContent-Typeis refused),@CrossOrigin,ResponseStatusException(int).Semaphore,ConcurrentLinkedQueue,Flow,YearMonth,TemporalAdjusters,BigDecimal,InetAddress(literals andlocalhost).ImageInfofor PNG/JPEG/GIF/WebP headers. Binary plists are refused.java.net.http(reflectively, Java 11+ at run time), refuses an HTTP/1.1 answer, and bounds the body by size and time. Streamed exchanges stay HTTP/1.1.{sha256}encoder for legacy recovery codes, remember-me devices (user_agent,ip_address; schema version 12), configurable security table names with indexes named after them.Reviewed adversarially in three rounds; the fixes it produced are in the last three commits.
Not covered: the security schema changes were tested on SQLite only.
🤖 Generated with Claude Code