Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Searchfox Update: Java/C++ binding analysis

100 views
Skip to first unread message

Nicolas Guichard

unread,
Jan 10, 2024, 11:41:57 AM1/10/24
to dev-pl...@mozilla.org
Hi,

End of November we added initial support for Java and Kotlin code indexing to mozilla-central on Searchfox, see https://groups.google.com/a/mozilla.org/g/dev-platform/c/kerF6YSMFIY/m/BGcQB57fAAAJ.

We have now added support for analyzing and displaying bindings between C++ and Java code.
This appears in two places:
* In the search page, when searching for a symbol:
- If the symbol is a binding, an element in the foreign language appears under “Definitions”.
- If the symbol is bound from another language, the bindings appears under “Bindings”.
* When triggering the context menu on a symbol that is marked as a binding to an element in another language, or is itself bound from another language: “go to” and “search” actions for the foreign symbol are proposed.

Where this works:
* C/C++ functions whose name match the pattern `Java_<qualified Java method name>[__.*]` are automatically annotated as bound from the matching Java method.
This is mostly used by mozglue, for instance:
- The Java native method `org::mozilla::gecko::mozglue::GeckoLoader::nativeRun`[1] links to its definition in C.
- The C function `Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun`[2] links back to the Java binding.

* C/C++ items generated via the @WrapForJNI Java annotation are automatically annotated as well.
For instance:
- The generated C++ class `mozilla::java::GeckoSession`[3] links to its Java class definition.
- The Java class `org::mozilla::geckoview::GeckoSession`[4] links back to the generated C++ binding.

- The generated C++ member function `mozilla::java::GeckoSession::GetCompositorEv`[5] links to its Java method definition.
- The Java method `org::mozilla::geckoview::GeckoSession::getCompositorFromNative`[6] links back to the generated C++ binding.

- The generated C++ methods `mozilla::java::GeckoHLSSample::DurationEv` (getter[7]/setter[8] pair) link to their Java field definition.
- The Java field `mozilla::gecko::media::GeckoHLSSample::duration`[9] links back to both the generated C++ getter and setter.

- The generated C++ constant `_ZN7mozilla4java10CodecProxy15INVALID_SESSIONE`[10] links to the matching Java constant definition.

- The Java class `org::mozilla::geckoview::GeckoSession::Window`[11] links to its C++ class definition.
- The C++ class `mozilla::widget::GeckoViewSupport`[12] links back to the Java class.

- The native Java method `org::mozilla::geckoview::GeckoSession::Window::open`[13] links to its C++ member function definition.
- The C++ member function `mozilla::widget::GeckoViewSupport::Open`[14] links back to the Java binding declaration.

* C/C++ items can be manually annotated with `__attributes__((annotate("<binding_to|bound_as>", "jvm", "<class|method|setter|getter|const>", "<foreign symbol>")))`
No code uses this directly for now, but this is the common basis used by all the cases above.

For more details, see bug 1865048.[0]

[0] https://bugzilla.mozilla.org/show_bug.cgi?id=1865048
[1] https://searchfox.org/mozilla-central/search?q=symbol%3AS_jvm_org%2Fmozilla%2Fgecko%2Fmozglue%2FGeckoLoader%23nativeRun().
[2] https://searchfox.org/mozilla-central/search?q=symbol:Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun
[3] https://searchfox.org/mozilla-central/search?q=symbol%3AT_mozilla%3A%3Ajava%3A%3AGeckoSession
[4] https://searchfox.org/mozilla-central/search?q=symbol:S_jvm_org%2Fmozilla%2Fgeckoview%2FGeckoSession%23
[5] https://searchfox.org/mozilla-central/search?q=symbol%3A_ZNK7mozilla4java12GeckoSession13GetCompositorEv
[6] https://searchfox.org/mozilla-central/search?q=symbol:S_jvm_org%2Fmozilla%2Fgeckoview%2FGeckoSession%23getCompositorFromNative().
[7] https://searchfox.org/mozilla-central/search?q=symbol:_ZNK7mozilla4java14GeckoHLSSample8DurationEv
[8] https://searchfox.org/mozilla-central/search?q=symbol:_ZNK7mozilla4java14GeckoHLSSample8DurationEx
[9] https://searchfox.org/mozilla-central/search?q=symbol%3AS_jvm_org%2Fmozilla%2Fgecko%2Fmedia%2FGeckoHLSSample%23duration.
[10] https://searchfox.org/mozilla-central/search?q=symbol:_ZN7mozilla4java10CodecProxy15INVALID_SESSIONE
[11] https://searchfox.org/mozilla-central/search?q=symbol%3AS_jvm_org%2Fmozilla%2Fgeckoview%2FGeckoSession%23Window%23
[12] https://searchfox.org/mozilla-central/search?q=symbol:T_mozilla%3A%3Awidget%3A%3AGeckoViewSupport
[13] https://searchfox.org/mozilla-central/search?q=symbol%3AS_jvm_org%2Fmozilla%2Fgeckoview%2FGeckoSession%23Window%23open().
[14] https://searchfox.org/mozilla-central/search?q=symbol:_ZN7mozilla6widget16GeckoViewSupport4OpenERKNS_3jni8LocalRefINS2_11TypedObjectIP7_jclassEEEERKNS2_3RefINS_4java12GeckoSession6WindowEP8_jobjectEERKNSB_INS2_6ObjectESG_EESN_SN_SN_SN_RKNS2_11StringParamESQ_b

Cheers,
--
Nicolas Guichard | nicolas....@kdab.com | Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel: France +33 (0)4 90 84 08 53, http://www.kdab.fr
KDAB - The Qt, C++ and OpenGL Experts
Reply all
Reply to author
Forward
0 new messages