8c1dbd3188
and cid#1606986 COPY_INSTEAD_OF_MOVE cid#1557969 COPY_INSTEAD_OF_MOVE cid#1557837 COPY_INSTEAD_OF_MOVE cid#1557772 COPY_INSTEAD_OF_MOVE cid#1557735 COPY_INSTEAD_OF_MOVE cid#1557672 COPY_INSTEAD_OF_MOVE cid#1557664 COPY_INSTEAD_OF_MOVE cid#1557650 COPY_INSTEAD_OF_MOVE cid#1557642 COPY_INSTEAD_OF_MOVE cid#1557639 COPY_INSTEAD_OF_MOVE cid#1557628 COPY_INSTEAD_OF_MOVE cid#1557623 COPY_INSTEAD_OF_MOVE cid#1557581 COPY_INSTEAD_OF_MOVE cid#1557489 COPY_INSTEAD_OF_MOVE cid#1557473 COPY_INSTEAD_OF_MOVE cid#1557317 COPY_INSTEAD_OF_MOVE cid#1557261 COPY_INSTEAD_OF_MOVE cid#1557146 COPY_INSTEAD_OF_MOVE cid#1557135 COPY_INSTEAD_OF_MOVE cid#1557134 COPY_INSTEAD_OF_MOVE cid#1557079 COPY_INSTEAD_OF_MOVE cid#1557063 COPY_INSTEAD_OF_MOVE cid#1557052 COPY_INSTEAD_OF_MOVE cid#1556982 COPY_INSTEAD_OF_MOVE cid#1556977 COPY_INSTEAD_OF_MOVE cid#1556950 COPY_INSTEAD_OF_MOVE cid#1556943 COPY_INSTEAD_OF_MOVE cid#1556804 COPY_INSTEAD_OF_MOVE cid#1556736 COPY_INSTEAD_OF_MOVE cid#1556658 COPY_INSTEAD_OF_MOVE cid#1556621 COPY_INSTEAD_OF_MOVE cid#1556590 COPY_INSTEAD_OF_MOVE cid#1556579 COPY_INSTEAD_OF_MOVE cid#1556534 COPY_INSTEAD_OF_MOVE cid#1556524 COPY_INSTEAD_OF_MOVE cid#1556478 COPY_INSTEAD_OF_MOVE cid#1556467 COPY_INSTEAD_OF_MOVE cid#1556422 COPY_INSTEAD_OF_MOVE cid#1556314 COPY_INSTEAD_OF_MOVE cid#1556309 COPY_INSTEAD_OF_MOVE cid#1556258 COPY_INSTEAD_OF_MOVE cid#1556143 COPY_INSTEAD_OF_MOVE cid#1556119 COPY_INSTEAD_OF_MOVE cid#1556101 COPY_INSTEAD_OF_MOVE cid#1556097 COPY_INSTEAD_OF_MOVE cid#1556039 COPY_INSTEAD_OF_MOVE cid#1555966 COPY_INSTEAD_OF_MOVE cid#1555948 COPY_INSTEAD_OF_MOVE cid#1555915 COPY_INSTEAD_OF_MOVE cid#1555836 COPY_INSTEAD_OF_MOVE cid#1555748 COPY_INSTEAD_OF_MOVE cid#1555644 COPY_INSTEAD_OF_MOVE cid#1555582 COPY_INSTEAD_OF_MOVE cid#1555478 COPY_INSTEAD_OF_MOVE cid#1555475 COPY_INSTEAD_OF_MOVE cid#1555409 COPY_INSTEAD_OF_MOVE cid#1555372 COPY_INSTEAD_OF_MOVE cid#1555334 COPY_INSTEAD_OF_MOVE cid#1555330 COPY_INSTEAD_OF_MOVE cid#1555310 COPY_INSTEAD_OF_MOVE cid#1555257 COPY_INSTEAD_OF_MOVE cid#1555247 COPY_INSTEAD_OF_MOVE cid#1555147 COPY_INSTEAD_OF_MOVE cid#1555120 COPY_INSTEAD_OF_MOVE cid#1555059 COPY_INSTEAD_OF_MOVE cid#1555016 COPY_INSTEAD_OF_MOVE cid#1554880 COPY_INSTEAD_OF_MOVE cid#1554824 COPY_INSTEAD_OF_MOVE cid#1554808 COPY_INSTEAD_OF_MOVE cid#1546189 COPY_INSTEAD_OF_MOVE Change-Id: I2d2f33c603f1596228c9ecb169472ba6751e7826 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177593 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> |
||
---|---|---|
.. | ||
source | ||
test | ||
util | ||
CppunitTest_stoc_dump.mk | ||
CppunitTest_stoc_uriproc.mk | ||
IwyuFilter_stoc.yaml | ||
Library_bootstrap.mk | ||
Library_introspection.mk | ||
Library_invocadapt.mk | ||
Library_invocation.mk | ||
Library_javaloader.mk | ||
Library_javavm.mk | ||
Library_namingservice.mk | ||
Library_proxyfac.mk | ||
Library_reflection.mk | ||
Library_stocservices.mk | ||
Makefile | ||
Module_stoc.mk | ||
README.md | ||
unosdk.mk |
Registries, Reflection, Introspection Implementation for UNO
The UNO types and services bootstrapping code is very old, and concepts are tightly knit together. Whenever you want to change something you risk backwards incompatibility. The code causes mental pain, and whenever you need to touch it you want to run away screaming. One typically ends up doing minimally invasive changes. That way, you have a chance of surviving the process. But you also pile up guilt.
At the heart of the matter there is the old binary "store" file structure
and the XRegistry
interface on top of it. At runtime, both all the UNO
type information (scattered across a number of binary .rdb
files) and
all the UNO service information (scattered across a number of .rdb
files
that used to be binary but have been mostly changed to XML now) are
represented by a single XRegistry
instance each.
The way the respective information is represented in the XRegistry
interface simply corresponds to the way the information is stored in the
binary .rdb
files. Those files are designed for storage of hierarchically
nested small blobs of information. Hence, for example information about
a UNO interface type com.sun.star.foo.XBar
is stored in a nested "folder"
with path com - sun - star - foo - XBar
, containing little blobs of
information about the type's ancestors, its methods, etc. Similarly
for information about instantiable services like com.sun.star.baz.Boz
.
As there are typically multiple .rdb
files containing types resp.
services (URE specific, LO specific, from extensions, ...), but they need
to be represented by a single XRegistry
instance, so "nested registries"
were invented. They effectively form a linear list of chaining XRegistry
instances together. Whenever a path needs to be looked up in the top-level
registry, it effectively searches through the linear list of nested
registries. All with the cumbersome UNO XRegistry
interface between
the individual parts. Horror.
When the XML service .rdb
s were introduced, we chickened out (see above
for rationale) and put them behind an XRegistry
facade, so that they
would seamlessly integrate with the existing mess. We postponed
systematic clean-up to the pie-in-the-sky days of LibreOffice 4 (or, "once we'll
become incompatible with OpenOffice.org," as the phrase used to be back then)