diff options
| author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2024-07-17 16:35:30 +0200 |
|---|---|---|
| committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2025-11-28 22:58:44 +0100 |
| commit | d045e2d2b604152450a45846fc87cb53d89bf50a (patch) | |
| tree | faa2e6b0710226b211be57ab9ad08df219907eb0 /src/plugins/platforms/windows/qwindowsmimeregistry.h | |
| parent | 7ceacc9a7c24be37a0251a7011fe7fe45e911cf2 (diff) | |
Detect whether the return type of a call is similar to std::expected.
This indicates that the caller wants to handle exceptions explicitly, so
in case of error, we pass it through the the std::expected-like value.
We still clear the exception state. The caller is responsible for
freeing the jthrowable local reference.
For this to work, we have to propagate errors through to the outer-most
function. This includes allowing QJniObject to create QJniEnvironment
instances that don't implicitly return a clean environment in the
destructor. As long as we can call checkAndClearExceptions() in the
public functions (unless the caller opts in), this should not break any
existing code that expects QJniObject to implicitly clear exceptions.
Add tests for all overloads to make sure that exceptions (from wrong
class or method names, and thrown in methods) are caught.
Add "Impl" helpers that do not handle exceptions if instantiated
accordingly, and call those if we have to maintain compatibility in
public functions while also enabling opt-in handling for modern APIs.
Add tests that show that we can now handle exceptions ourselves for all
public QJniObject APIs. If possible, we build the test with C++23 so
that we can use std::expected; otherwise, try to use tl::expected by
downloading the header-only implementation from github; and failing
that, use a minimal implementation of a type that could be used instead
and makes the test pass.
Fixes: QTBUG-93800
Fixes: QTBUG-119791
Task-number: QTBUG-92952
Change-Id: I1cfac37ac9af8fd421bc0af030a1d448dd0e259e
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsmimeregistry.h')
0 files changed, 0 insertions, 0 deletions
