Developer guide: drop the Freshdesk case study and the Mirah port - #5695
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9695761422
ℹ️ 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".
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
Cloudflare Preview
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3fd6a4f111
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c86818b38d
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 439181c2e2
ℹ️ 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".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d107a494cd
ℹ️ 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".
The "Integrating 3rd party native SDKs" walkthrough taught native interfaces against Freshdesk Mobihelp -- an SDK discontinued years ago, behind vendor links that no longer resolve. Its 544 lines were also a duplicate: the same chapter already covers native interfaces, bundling an aar or jar on Android, CocoaPods on iOS, and packaging the result as a cn1lib, all in current form. What the case study uniquely had was the vendor. Deleting it takes 14 dead links out of the link ratchet with it, along with the seven demo classes, the Android vendor stubs, the Objective-C implementation and five images that existed only to serve it. "Port a language to Codename One" goes too. It is a walkthrough of porting Mirah, a language whose last release was a decade ago, complete with a NetBeans module and an Ant script, narrated in the third person about who did the work. The one thing worth keeping was the picture, so the native interfaces section now has a vendor-neutral diagram of the round trip and a paragraph on the part that actually catches people out: an asynchronous SDK cannot return through the interface, so it calls back into a static Java method instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…agram The new paragraph and the diagram label both said primitives and strings, while the paragraph directly above them lists single dimension primitive arrays and PeerComponent values as well. A reader wrapping an API that needs a buffer would have serialized it for no reason, and one wanting a native widget would have concluded it cannot cross at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Deleting the case study took the only instructions for integrating an iOS SDK that is not a pod. CocoaPods cannot install a vendor's static library and headers, and Working-With-iOS only mentions .h and .a files in passing as the thing pods save you from -- so an SDK shipped that way lost its documented route entirely. There is now an iOS counterpart to the Android 3rd party section: pods first, then where .h, .a and .bundle go, that a .framework has to be zipped under its own name, and what ios.add_libs is for. No vendor in it. The diagram also drew one return arrow and labelled it as the static callback, which is only how an asynchronous SDK answers. A native method returning a supported type returns it directly. The arrows are now separate -- a solid one for the marshalled return, a dashed one into the callback -- and the paragraph beside it says the same. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The new section said to copy vendor binaries into the ios native directory, which is the Ant layout. Cn1libMojo packages ios/src/main/objectivec and ios/src/main/resources, so a Maven project that follows the old wording drops the SDK somewhere the native archive never picks up. Headers now go with the sources in objectivec, binaries and bundles in resources, a framework zipped under its own name in resources, and native/ios is called out as the legacy Ant layout -- which is what Analytics.asciidoc already says and what this chapter's own native interface table already shows. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The call arrow ran from NativeInterface to the Vendor SDK box and left the Impl class connected to nothing, which is the opposite of what the chapter teaches: the interface is marshalled into the per-platform implementation, and only that implementation talks to the SDK. Redrawn so the Impl sits opposite the interface with the call and return arrows between them, the SDK sits below the Impl with its own pair, and the dashed callback path starts where the late answer actually comes from. The paragraph beside it says nothing calls the vendor's SDK except the implementation class. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rerouting the synchronous arrows through the implementation left the dashed one starting inside the Vendor SDK box and crossing straight into Java, which says the SDK can skip the implementation layer -- the opposite of the sentence under it. A vendor callback fires into the implementation, and the implementation is what calls the static Java method. The dashed path now leaves the impl's left edge, drops clear of the SDK box and crosses back, and the footer says the implementation is the only thing that talks to the SDK in either direction. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
d107a49 to
74637f5
Compare
Two pieces of the guide that document things which no longer exist.
The Freshdesk/Mobihelp case study (~544 lines, three top-level sections) taught
native interfaces against an SDK discontinued years ago, behind vendor links that no
longer resolve. It was also largely a duplicate: the same chapter already covers
native interfaces, bundling a jar or
aaron Android, CocoaPods on iOS, and packagingthe result as a cn1lib — all in current form. What the case study uniquely had was the
vendor.
Going with it: 14 dead links out of the link ratchet, seven demo classes, the Android
vendor stubs, the Objective-C implementation, and five images that existed only to
serve it.
"Port a language to Codename One" is a walkthrough of porting Mirah — last released
about a decade ago — via a NetBeans module and an Ant script, narrated in the third
person about who did the work.
The one thing worth keeping was the picture. The native interfaces section now carries a
vendor-neutral SVG of the round trip, plus a paragraph on the part that actually catches
people out: an asynchronous SDK can't return a value through the interface, so the native
side calls back into a
staticJava method instead.Net: 1451 deletions, 60 insertions. Both ratchets shrink and neither gains an entry —
missing-code-blocks 91 → 90, guide-links 35 → 21.
Verified locally: demos compile plus the bytecode compliance check, every guide gate,
the unused-image check, asciidoctor at
--failure-level WARN, and Vale plus LanguageToolon the edited chapter. The three images the guide dropped are still referenced by blog
posts, which keep their own copies under
docs/website/static/blog/— checked beforedeleting.
🤖 Generated with Claude Code